From 65df29e84ce386cabb39480d3cb12df13c666ae0 Mon Sep 17 00:00:00 2001 From: Ram Muthiah Date: Mon, 30 Mar 2020 22:03:34 -0700 Subject: [PATCH 001/136] ANDROID: GKI: Removed cuttlefish configs Configs were moved to repo cuttlefish-modules. Bug: 151981046 Test: Treehugger Signed-off-by: Ram Muthiah Change-Id: I217422c401c6ea183ce974c1d156abd4d9e209a6 --- build.config.cuttlefish.aarch64 | 11 ----------- build.config.cuttlefish.x86_64 | 11 ----------- cuttlefish.fragment | 20 -------------------- 3 files changed, 42 deletions(-) delete mode 100644 build.config.cuttlefish.aarch64 delete mode 100644 build.config.cuttlefish.x86_64 delete mode 100644 cuttlefish.fragment diff --git a/build.config.cuttlefish.aarch64 b/build.config.cuttlefish.aarch64 deleted file mode 100644 index 9a685095e934..000000000000 --- a/build.config.cuttlefish.aarch64 +++ /dev/null @@ -1,11 +0,0 @@ -. ${ROOT_DIR}/common/build.config.common -. ${ROOT_DIR}/common/build.config.aarch64 -. ${ROOT_DIR}/common/build.config.gki - -BUILD_INITRAMFS=1 -DEFCONFIG=cf_aarch_64_gki_defconfig -PRE_DEFCONFIG_CMDS="KCONFIG_CONFIG=${ROOT_DIR}/common/arch/arm64/configs/${DEFCONFIG} ${ROOT_DIR}/common/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/common/arch/arm64/configs/gki_defconfig ${ROOT_DIR}/common/cuttlefish.fragment" -POST_DEFCONFIG_CMDS="rm ${ROOT_DIR}/common/arch/arm64/configs/${DEFCONFIG}" - -# Not saving any kernel images. This build step is meant purely to generate the .kos. -FILES="" diff --git a/build.config.cuttlefish.x86_64 b/build.config.cuttlefish.x86_64 deleted file mode 100644 index d6ce5c3a7306..000000000000 --- a/build.config.cuttlefish.x86_64 +++ /dev/null @@ -1,11 +0,0 @@ -. ${ROOT_DIR}/common/build.config.common -. ${ROOT_DIR}/common/build.config.x86_64 -. ${ROOT_DIR}/common/build.config.gki - -BUILD_INITRAMFS=1 -DEFCONFIG=cf_x86_64_gki_defconfig -PRE_DEFCONFIG_CMDS="KCONFIG_CONFIG=${ROOT_DIR}/common/arch/x86/configs/${DEFCONFIG} ${ROOT_DIR}/common/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/common/arch/x86/configs/gki_defconfig ${ROOT_DIR}/common/cuttlefish.fragment" -POST_DEFCONFIG_CMDS="rm ${ROOT_DIR}/common/arch/x86/configs/${DEFCONFIG}" - -# Not saving any kernel images. This build step is meant purely to generate the .kos. -FILES="" diff --git a/cuttlefish.fragment b/cuttlefish.fragment deleted file mode 100644 index cdc0831d4e51..000000000000 --- a/cuttlefish.fragment +++ /dev/null @@ -1,20 +0,0 @@ -CONFIG_CPUFREQ_DUMMY=m -CONFIG_VSOCKETS=m -CONFIG_VIRTIO_VSOCKETS=m -CONFIG_GNSS_CMDLINE_SERIAL=m -CONFIG_VIRTIO_BLK=m -CONFIG_VIRTIO_NET=m -CONFIG_VIRT_WIFI=m -CONFIG_HW_RANDOM_VIRTIO=m -CONFIG_DRM_VIRTIO_GPU=m -CONFIG_SND_INTEL8X0=m -CONFIG_USB_DUMMY_HCD=m -CONFIG_RTC_DRV_TEST=m -CONFIG_VIRTIO_PCI=m -CONFIG_VIRTIO_PMEM=m -CONFIG_VIRTIO_INPUT=m -CONFIG_VIRTIO_MMIO=m -CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y -CONFIG_TEST_STACKINIT=m -CONFIG_TEST_MEMINIT=m -CONFIG_SDCARD_FS=m From 13000e5761aae72fde7c8d78c8d6f99d8c3f60d4 Mon Sep 17 00:00:00 2001 From: Paul Lawrence Date: Thu, 26 Mar 2020 12:53:11 -0700 Subject: [PATCH 002/136] ANDROID: Incremental fs: Fix four resource bugs Without these, you can't unmount a volume on which incfs was mounted and the tests run. Also incfs_tests would fail sporadically without the fix to test_inode Test: Run incfs_test and unmount underlying volume 1000 times Bug: 152636070 Signed-off-by: Paul Lawrence Change-Id: I88f11f5d4269c22d9073e5eb671d0c7cc4629f6c (cherry picked from commit c062bc8e769f0f6e47cc41fb9b7ab30e3e7f2689) --- fs/incfs/vfs.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/fs/incfs/vfs.c b/fs/incfs/vfs.c index ffa5b7ef9d5e..417064cadb31 100644 --- a/fs/incfs/vfs.c +++ b/fs/incfs/vfs.c @@ -347,8 +347,8 @@ static int inode_test(struct inode *inode, void *opaque) return (node->n_backing_inode == backing_inode) && inode->i_ino == search->ino; - } - return 1; + } else + return inode->i_ino == search->ino; } static int inode_set(struct inode *inode, void *opaque) @@ -894,6 +894,7 @@ static int init_new_file(struct mount_info *mi, struct dentry *dentry, } bfc = incfs_alloc_bfc(new_file); + fput(new_file); if (IS_ERR(bfc)) { error = PTR_ERR(bfc); bfc = NULL; @@ -1676,6 +1677,7 @@ static int final_file_delete(struct mount_info *mi, if (d_really_is_positive(index_file_dentry)) error = incfs_unlink(index_file_dentry); out: + dput(index_file_dentry); if (error) pr_debug("incfs: delete_file_from_index err:%d\n", error); return error; @@ -1978,6 +1980,7 @@ static void dentry_release(struct dentry *d) if (di) path_put(&di->backing_path); + kfree(d->d_fsdata); d->d_fsdata = NULL; } @@ -2189,7 +2192,7 @@ struct dentry *incfs_mount_fs(struct file_system_type *type, int flags, path_put(&backing_dir_path); sb->s_flags |= SB_ACTIVE; - pr_debug("infs: mount\n"); + pr_debug("incfs: mount\n"); return dget(sb->s_root); err: sb->s_fs_info = NULL; @@ -2215,7 +2218,7 @@ static int incfs_remount_fs(struct super_block *sb, int *flags, char *data) pr_debug("incfs: new timeout_ms=%d", options.read_timeout_ms); } - pr_debug("infs: remount\n"); + pr_debug("incfs: remount\n"); return 0; } @@ -2223,7 +2226,7 @@ void incfs_kill_sb(struct super_block *sb) { struct mount_info *mi = sb->s_fs_info; - pr_debug("infs: unmount\n"); + pr_debug("incfs: unmount\n"); incfs_free_mount_info(mi); generic_shutdown_super(sb); } From 7e27ee5fc8f8ef489e836552556dc9b36bd08322 Mon Sep 17 00:00:00 2001 From: Hyesoo Yu Date: Thu, 5 Mar 2020 15:33:07 +0900 Subject: [PATCH 003/136] ANDROID: staging: ion: move definition of attachment The ion_dma_buf_attachment definition that is connected to attachment of ion_buffer is used by dma buf ops. However this definition should be available for heap's dma buf ops as well as for built-in dma buf ops. Therefore we move this definition to the ion header. Bug: 151780326 Signed-off-by: Hyesoo Yu Change-Id: Ib3023e29f48b1e2502f8d750af6645f65f6eea40 --- drivers/staging/android/ion/ion_dma_buf.c | 6 ------ include/linux/ion.h | 12 ++++++++++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/drivers/staging/android/ion/ion_dma_buf.c b/drivers/staging/android/ion/ion_dma_buf.c index 5917ce9f8f44..c3734ff40940 100644 --- a/drivers/staging/android/ion/ion_dma_buf.c +++ b/drivers/staging/android/ion/ion_dma_buf.c @@ -45,12 +45,6 @@ static void free_duped_table(struct sg_table *table) kfree(table); } -struct ion_dma_buf_attachment { - struct device *dev; - struct sg_table *table; - struct list_head list; -}; - static int ion_dma_buf_attach(struct dma_buf *dmabuf, struct dma_buf_attachment *attachment) { diff --git a/include/linux/ion.h b/include/linux/ion.h index fa86bcce6e8f..088705119b16 100644 --- a/include/linux/ion.h +++ b/include/linux/ion.h @@ -144,6 +144,18 @@ struct ion_heap { #define ion_device_add_heap(heap) __ion_device_add_heap(heap, THIS_MODULE) +/** + * struct ion_dma_buf_attachment - hold device-table attachment data for buffer + * @dev: device attached to the buffer. + * @table: cached mapping. + * @list: list of ion_dma_buf_attachment. + */ +struct ion_dma_buf_attachment { + struct device *dev; + struct sg_table *table; + struct list_head list; +}; + #ifdef CONFIG_ION /** From 0abe66762333a98b60c9435ae513149be809d344 Mon Sep 17 00:00:00 2001 From: Qais Yousef Date: Mon, 2 Mar 2020 13:27:16 +0000 Subject: [PATCH 004/136] UPSTREAM: sched/rt: cpupri_find: Implement fallback mechanism for !fit case When searching for the best lowest_mask with a fitness_fn passed, make sure we record the lowest_level that returns a valid lowest_mask so that we can use that as a fallback in case we fail to find a fitting CPU at all levels. The intention in the original patch was not to allow a down migration to unfitting CPU. But this missed the case where we are already running on unfitting one. With this change now RT tasks can still move between unfitting CPUs when they're already running on such CPU. And as Steve suggested; to adhere to the strict priority rules of RT, if a task is already running on a fitting CPU but due to priority it can't run on it, allow it to downmigrate to unfitting CPU so it can run. Bug: 120440300 Reported-by: Pavan Kondeti Signed-off-by: Qais Yousef Signed-off-by: Peter Zijlstra (Intel) Signed-off-by: Ingo Molnar Fixes: 804d402fb6f6 ("sched/rt: Make RT capacity-aware") Link: https://lkml.kernel.org/r/20200302132721.8353-2-qais.yousef@arm.com Link: https://lore.kernel.org/lkml/20200203142712.a7yvlyo2y3le5cpn@e107158-lin/ (cherry picked from commit d9cb236b9429044dc694ea70a50163ddd283cea6) Signed-off-by: Qais Yousef Change-Id: Ifa10286907644a01e75e37c9f523188fd7b43469 --- kernel/sched/cpupri.c | 161 +++++++++++++++++++++++++++--------------- 1 file changed, 103 insertions(+), 58 deletions(-) diff --git a/kernel/sched/cpupri.c b/kernel/sched/cpupri.c index 1a2719e1350a..1bcfa1995550 100644 --- a/kernel/sched/cpupri.c +++ b/kernel/sched/cpupri.c @@ -41,6 +41,59 @@ static int convert_prio(int prio) return cpupri; } +static inline int __cpupri_find(struct cpupri *cp, struct task_struct *p, + struct cpumask *lowest_mask, int idx) +{ + struct cpupri_vec *vec = &cp->pri_to_cpu[idx]; + int skip = 0; + + if (!atomic_read(&(vec)->count)) + skip = 1; + /* + * When looking at the vector, we need to read the counter, + * do a memory barrier, then read the mask. + * + * Note: This is still all racey, but we can deal with it. + * Ideally, we only want to look at masks that are set. + * + * If a mask is not set, then the only thing wrong is that we + * did a little more work than necessary. + * + * If we read a zero count but the mask is set, because of the + * memory barriers, that can only happen when the highest prio + * task for a run queue has left the run queue, in which case, + * it will be followed by a pull. If the task we are processing + * fails to find a proper place to go, that pull request will + * pull this task if the run queue is running at a lower + * priority. + */ + smp_rmb(); + + /* Need to do the rmb for every iteration */ + if (skip) + return 0; + + if (cpumask_any_and(p->cpus_ptr, vec->mask) >= nr_cpu_ids) + return 0; + + if (lowest_mask) { + cpumask_and(lowest_mask, p->cpus_ptr, vec->mask); + + /* + * We have to ensure that we have at least one bit + * still set in the array, since the map could have + * been concurrently emptied between the first and + * second reads of vec->mask. If we hit this + * condition, simply act as though we never hit this + * priority level and continue on. + */ + if (cpumask_empty(lowest_mask)) + return 0; + } + + return 1; +} + /** * cpupri_find - find the best (lowest-pri) CPU in the system * @cp: The cpupri context @@ -62,80 +115,72 @@ int cpupri_find(struct cpupri *cp, struct task_struct *p, struct cpumask *lowest_mask, bool (*fitness_fn)(struct task_struct *p, int cpu)) { - int idx = 0; int task_pri = convert_prio(p->prio); + int best_unfit_idx = -1; + int idx = 0, cpu; BUG_ON(task_pri >= CPUPRI_NR_PRIORITIES); for (idx = 0; idx < task_pri; idx++) { - struct cpupri_vec *vec = &cp->pri_to_cpu[idx]; - int skip = 0; - if (!atomic_read(&(vec)->count)) - skip = 1; + if (!__cpupri_find(cp, p, lowest_mask, idx)) + continue; + + if (!lowest_mask || !fitness_fn) + return 1; + + /* Ensure the capacity of the CPUs fit the task */ + for_each_cpu(cpu, lowest_mask) { + if (!fitness_fn(p, cpu)) + cpumask_clear_cpu(cpu, lowest_mask); + } + /* - * When looking at the vector, we need to read the counter, - * do a memory barrier, then read the mask. - * - * Note: This is still all racey, but we can deal with it. - * Ideally, we only want to look at masks that are set. - * - * If a mask is not set, then the only thing wrong is that we - * did a little more work than necessary. - * - * If we read a zero count but the mask is set, because of the - * memory barriers, that can only happen when the highest prio - * task for a run queue has left the run queue, in which case, - * it will be followed by a pull. If the task we are processing - * fails to find a proper place to go, that pull request will - * pull this task if the run queue is running at a lower - * priority. + * If no CPU at the current priority can fit the task + * continue looking */ - smp_rmb(); - - /* Need to do the rmb for every iteration */ - if (skip) - continue; - - if (cpumask_any_and(p->cpus_ptr, vec->mask) >= nr_cpu_ids) - continue; - - if (lowest_mask) { - int cpu; - - cpumask_and(lowest_mask, p->cpus_ptr, vec->mask); - + if (cpumask_empty(lowest_mask)) { /* - * We have to ensure that we have at least one bit - * still set in the array, since the map could have - * been concurrently emptied between the first and - * second reads of vec->mask. If we hit this - * condition, simply act as though we never hit this - * priority level and continue on. + * Store our fallback priority in case we + * didn't find a fitting CPU */ - if (cpumask_empty(lowest_mask)) - continue; + if (best_unfit_idx == -1) + best_unfit_idx = idx; - if (!fitness_fn) - return 1; - - /* Ensure the capacity of the CPUs fit the task */ - for_each_cpu(cpu, lowest_mask) { - if (!fitness_fn(p, cpu)) - cpumask_clear_cpu(cpu, lowest_mask); - } - - /* - * If no CPU at the current priority can fit the task - * continue looking - */ - if (cpumask_empty(lowest_mask)) - continue; + continue; } return 1; } + /* + * If we failed to find a fitting lowest_mask, make sure we fall back + * to the last known unfitting lowest_mask. + * + * Note that the map of the recorded idx might have changed since then, + * so we must ensure to do the full dance to make sure that level still + * holds a valid lowest_mask. + * + * As per above, the map could have been concurrently emptied while we + * were busy searching for a fitting lowest_mask at the other priority + * levels. + * + * This rule favours honouring priority over fitting the task in the + * correct CPU (Capacity Awareness being the only user now). + * The idea is that if a higher priority task can run, then it should + * run even if this ends up being on unfitting CPU. + * + * The cost of this trade-off is not entirely clear and will probably + * be good for some workloads and bad for others. + * + * The main idea here is that if some CPUs were overcommitted, we try + * to spread which is what the scheduler traditionally did. Sys admins + * must do proper RT planning to avoid overloading the system if they + * really care. + */ + if (best_unfit_idx != -1) + return __cpupri_find(cp, p, lowest_mask, best_unfit_idx); + return 0; } From a3b3fe50f546fd103320bcad42619dd665ba83cd Mon Sep 17 00:00:00 2001 From: Qais Yousef Date: Mon, 2 Mar 2020 13:27:17 +0000 Subject: [PATCH 005/136] UPSTREAM: sched/rt: Re-instate old behavior in select_task_rq_rt() When RT Capacity Aware support was added, the logic in select_task_rq_rt was modified to force a search for a fitting CPU if the task currently doesn't run on one. But if the search failed, and the search was only triggered to fulfill the fitness request; we could end up selecting a new CPU unnecessarily. Fix this and re-instate the original behavior by ensuring we bail out in that case. This behavior change only affected asymmetric systems that are using util_clamp to implement capacity aware. None asymmetric systems weren't affected. Bug: 120440300 LINK: https://lore.kernel.org/lkml/20200218041620.GD28029@codeaurora.org/ Reported-by: Pavan Kondeti Signed-off-by: Qais Yousef Signed-off-by: Peter Zijlstra (Intel) Signed-off-by: Ingo Molnar Fixes: 804d402fb6f6 ("sched/rt: Make RT capacity-aware") Link: https://lkml.kernel.org/r/20200302132721.8353-3-qais.yousef@arm.com (cherry picked from commit b28bc1e002c23ff8a4999c4a2fb1d4d412bc6f5e) Signed-off-by: Qais Yousef Change-Id: Ie3e9e56fcf7d92a1552828b20a5d9d827c030099 --- kernel/sched/rt.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index f87c34afd5ad..c618f83d66ff 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -1474,6 +1474,13 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags) if (test || !rt_task_fits_capacity(p, cpu)) { int target = find_lowest_rq(p); + /* + * Bail out if we were forcing a migration to find a better + * fitting CPU but our search failed. + */ + if (!test && target != -1 && !rt_task_fits_capacity(p, target)) + goto out_unlock; + /* * Don't bother moving it if the destination CPU is * not running a lower priority task. @@ -1482,6 +1489,8 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags) p->prio < cpu_rq(target)->rt.highest_prio.curr) cpu = target; } + +out_unlock: rcu_read_unlock(); out: From e1c68ebed94b9be4645e3378e44d7d04ee5dca75 Mon Sep 17 00:00:00 2001 From: Qais Yousef Date: Mon, 2 Mar 2020 13:27:18 +0000 Subject: [PATCH 006/136] UPSTREAM: sched/rt: Optimize cpupri_find() on non-heterogenous systems By introducing a new cpupri_find_fitness() function that takes the fitness_fn as an argument and only called when asym_system static key is enabled. cpupri_find() is now a wrapper function that calls cpupri_find_fitness() passing NULL as a fitness_fn, hence disabling the logic that handles fitness by default. Bug: 120440300 LINK: https://lore.kernel.org/lkml/c0772fca-0a4b-c88d-fdf2-5715fcf8447b@arm.com/ Reported-by: Dietmar Eggemann Signed-off-by: Qais Yousef Signed-off-by: Peter Zijlstra (Intel) Signed-off-by: Ingo Molnar Fixes: 804d402fb6f6 ("sched/rt: Make RT capacity-aware") Link: https://lkml.kernel.org/r/20200302132721.8353-4-qais.yousef@arm.com (cherry picked from commit a1bd02e1f28b1939cac8c64072a0e578c3cbc345) Signed-off-by: Qais Yousef Change-Id: I8d72829d0026219ad7d46633c30cb2653343360c --- kernel/sched/cpupri.c | 10 ++++++++-- kernel/sched/cpupri.h | 6 ++++-- kernel/sched/rt.c | 23 +++++++++++++++++++---- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/kernel/sched/cpupri.c b/kernel/sched/cpupri.c index 1bcfa1995550..dd3f16d1a04a 100644 --- a/kernel/sched/cpupri.c +++ b/kernel/sched/cpupri.c @@ -94,8 +94,14 @@ static inline int __cpupri_find(struct cpupri *cp, struct task_struct *p, return 1; } +int cpupri_find(struct cpupri *cp, struct task_struct *p, + struct cpumask *lowest_mask) +{ + return cpupri_find_fitness(cp, p, lowest_mask, NULL); +} + /** - * cpupri_find - find the best (lowest-pri) CPU in the system + * cpupri_find_fitness - find the best (lowest-pri) CPU in the system * @cp: The cpupri context * @p: The task * @lowest_mask: A mask to fill in with selected CPUs (or NULL) @@ -111,7 +117,7 @@ static inline int __cpupri_find(struct cpupri *cp, struct task_struct *p, * * Return: (int)bool - CPUs were found */ -int cpupri_find(struct cpupri *cp, struct task_struct *p, +int cpupri_find_fitness(struct cpupri *cp, struct task_struct *p, struct cpumask *lowest_mask, bool (*fitness_fn)(struct task_struct *p, int cpu)) { diff --git a/kernel/sched/cpupri.h b/kernel/sched/cpupri.h index 32dd520db11f..efbb492bb94c 100644 --- a/kernel/sched/cpupri.h +++ b/kernel/sched/cpupri.h @@ -19,8 +19,10 @@ struct cpupri { #ifdef CONFIG_SMP int cpupri_find(struct cpupri *cp, struct task_struct *p, - struct cpumask *lowest_mask, - bool (*fitness_fn)(struct task_struct *p, int cpu)); + struct cpumask *lowest_mask); +int cpupri_find_fitness(struct cpupri *cp, struct task_struct *p, + struct cpumask *lowest_mask, + bool (*fitness_fn)(struct task_struct *p, int cpu)); void cpupri_set(struct cpupri *cp, int cpu, int pri); int cpupri_init(struct cpupri *cp); void cpupri_cleanup(struct cpupri *cp); diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index c618f83d66ff..472d634e55ac 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -1504,7 +1504,7 @@ static void check_preempt_equal_prio(struct rq *rq, struct task_struct *p) * let's hope p can move out. */ if (rq->curr->nr_cpus_allowed == 1 || - !cpupri_find(&rq->rd->cpupri, rq->curr, NULL, NULL)) + !cpupri_find(&rq->rd->cpupri, rq->curr, NULL)) return; /* @@ -1512,7 +1512,7 @@ static void check_preempt_equal_prio(struct rq *rq, struct task_struct *p) * see if it is pushed or pulled somewhere else. */ if (p->nr_cpus_allowed != 1 && - cpupri_find(&rq->rd->cpupri, p, NULL, NULL)) + cpupri_find(&rq->rd->cpupri, p, NULL)) return; /* @@ -1694,6 +1694,7 @@ static int find_lowest_rq(struct task_struct *task) struct cpumask *lowest_mask = this_cpu_cpumask_var_ptr(local_cpu_mask); int this_cpu = smp_processor_id(); int cpu = task_cpu(task); + int ret; /* Make sure the mask is initialized first */ if (unlikely(!lowest_mask)) @@ -1702,8 +1703,22 @@ static int find_lowest_rq(struct task_struct *task) if (task->nr_cpus_allowed == 1) return -1; /* No other targets possible */ - if (!cpupri_find(&task_rq(task)->rd->cpupri, task, lowest_mask, - rt_task_fits_capacity)) + /* + * If we're on asym system ensure we consider the different capacities + * of the CPUs when searching for the lowest_mask. + */ + if (static_branch_unlikely(&sched_asym_cpucapacity)) { + + ret = cpupri_find_fitness(&task_rq(task)->rd->cpupri, + task, lowest_mask, + rt_task_fits_capacity); + } else { + + ret = cpupri_find(&task_rq(task)->rd->cpupri, + task, lowest_mask); + } + + if (!ret) return -1; /* No targets found */ /* From 063d4fb3fdc14dc816d5464a49d3c919257ae9a8 Mon Sep 17 00:00:00 2001 From: Qais Yousef Date: Mon, 2 Mar 2020 13:27:19 +0000 Subject: [PATCH 007/136] UPSTREAM: sched/rt: Allow pulling unfitting task When implemented RT Capacity Awareness; the logic was done such that if a task was running on a fitting CPU, then it was sticky and we would try our best to keep it there. But as Steve suggested, to adhere to the strict priority rules of RT class; allow pulling an RT task to unfitting CPU to ensure it gets a chance to run ASAP. Bug: 120440300 LINK: https://lore.kernel.org/lkml/20200203111451.0d1da58f@oasis.local.home/ Suggested-by: Steven Rostedt Signed-off-by: Qais Yousef Signed-off-by: Peter Zijlstra (Intel) Signed-off-by: Ingo Molnar Fixes: 804d402fb6f6 ("sched/rt: Make RT capacity-aware") Link: https://lkml.kernel.org/r/20200302132721.8353-5-qais.yousef@arm.com (cherry picked from commit 98ca645f824301bde72e0a51cdc8bdbbea6774a5) Signed-off-by: Qais Yousef Change-Id: Ifa1b1529690e190c7ad209643fb70532d8c3b492 --- kernel/sched/rt.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index 472d634e55ac..973332cedd2d 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -1659,8 +1659,7 @@ static void put_prev_task_rt(struct rq *rq, struct task_struct *p) static int pick_rt_task(struct rq *rq, struct task_struct *p, int cpu) { if (!task_running(rq, p) && - cpumask_test_cpu(cpu, p->cpus_ptr) && - rt_task_fits_capacity(p, cpu)) + cpumask_test_cpu(cpu, p->cpus_ptr)) return 1; return 0; From a6ec67b2fced9183665ccd69bd3751560095f0cd Mon Sep 17 00:00:00 2001 From: Qais Yousef Date: Mon, 2 Mar 2020 13:27:20 +0000 Subject: [PATCH 008/136] UPSTREAM: sched/rt: Remove unnecessary push for unfit tasks In task_woken_rt() and switched_to_rto() we try trigger push-pull if the task is unfit. But the logic is found lacking because if the task was the only one running on the CPU, then rt_rq is not in overloaded state and won't trigger a push. The necessity of this logic was under a debate as well, a summary of the discussion can be found in the following thread: https://lore.kernel.org/lkml/20200226160247.iqvdakiqbakk2llz@e107158-lin.cambridge.arm.com/ Remove the logic for now until a better approach is agreed upon. Bug: 120440300 Signed-off-by: Qais Yousef Signed-off-by: Peter Zijlstra (Intel) Signed-off-by: Ingo Molnar Fixes: 804d402fb6f6 ("sched/rt: Make RT capacity-aware") Link: https://lkml.kernel.org/r/20200302132721.8353-6-qais.yousef@arm.com (cherry picked from commit d94a9df49069ba8ff7c4aaeca1229e6471a01a15) Signed-off-by: Qais Yousef Change-Id: Ia49173b7be5dbd95e41cb1ddf248760975ad3355 --- kernel/sched/rt.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index 973332cedd2d..6afc86f99a37 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -2228,7 +2228,7 @@ static void task_woken_rt(struct rq *rq, struct task_struct *p) (rq->curr->nr_cpus_allowed < 2 || rq->curr->prio <= p->prio); - if (need_to_push || !rt_task_fits_capacity(p, cpu_of(rq))) + if (need_to_push) push_rt_tasks(rq); } @@ -2300,10 +2300,7 @@ static void switched_to_rt(struct rq *rq, struct task_struct *p) */ if (task_on_rq_queued(p) && rq->curr != p) { #ifdef CONFIG_SMP - bool need_to_push = rq->rt.overloaded || - !rt_task_fits_capacity(p, cpu_of(rq)); - - if (p->nr_cpus_allowed > 1 && need_to_push) + if (p->nr_cpus_allowed > 1 && rq->rt.overloaded) rt_queue_push_tasks(rq); #endif /* CONFIG_SMP */ if (p->prio < rq->curr->prio && cpu_online(cpu_of(rq))) From 75fdd658cb605d8e2b9b65fbc431486141a697b3 Mon Sep 17 00:00:00 2001 From: Qais Yousef Date: Thu, 5 Mar 2020 10:24:50 +0000 Subject: [PATCH 009/136] UPSTREAM: sched/rt: cpupri_find: Trigger a full search as fallback If we failed to find a fitting CPU, in cpupri_find(), we only fallback to the level we found a hit at. But Steve suggested to fallback to a second full scan instead as this could be a better effort. https://lore.kernel.org/lkml/20200304135404.146c56eb@gandalf.local.home/ We trigger the 2nd search unconditionally since the argument about triggering a full search is that the recorded fall back level might have become empty by then. Which means storing any data about what happened would be meaningless and stale. I had a humble try at timing it and it seemed okay for the small 6 CPUs system I was running on https://lore.kernel.org/lkml/20200305124324.42x6ehjxbnjkklnh@e107158-lin.cambridge.arm.com/ On large system this second full scan could be expensive. But there are no users outside capacity awareness for this fitness function at the moment. Heterogeneous systems tend to be small with 8cores in total. Bug: 120440300 Suggested-by: Steven Rostedt Signed-off-by: Qais Yousef Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: Steven Rostedt (VMware) Link: https://lkml.kernel.org/r/20200310142219.syxzn5ljpdxqtbgx@e107158-lin.cambridge.arm.com (cherry picked from commit e94f80f6c49020008e6fa0f3d4b806b8595d17d8) Signed-off-by: Qais Yousef Change-Id: I94a3abf1440f20f57d8fe9ba1bb00e1d05221565 --- kernel/sched/cpupri.c | 29 ++++++----------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/kernel/sched/cpupri.c b/kernel/sched/cpupri.c index dd3f16d1a04a..0033731a0797 100644 --- a/kernel/sched/cpupri.c +++ b/kernel/sched/cpupri.c @@ -122,8 +122,7 @@ int cpupri_find_fitness(struct cpupri *cp, struct task_struct *p, bool (*fitness_fn)(struct task_struct *p, int cpu)) { int task_pri = convert_prio(p->prio); - int best_unfit_idx = -1; - int idx = 0, cpu; + int idx, cpu; BUG_ON(task_pri >= CPUPRI_NR_PRIORITIES); @@ -145,31 +144,15 @@ int cpupri_find_fitness(struct cpupri *cp, struct task_struct *p, * If no CPU at the current priority can fit the task * continue looking */ - if (cpumask_empty(lowest_mask)) { - /* - * Store our fallback priority in case we - * didn't find a fitting CPU - */ - if (best_unfit_idx == -1) - best_unfit_idx = idx; - + if (cpumask_empty(lowest_mask)) continue; - } return 1; } /* - * If we failed to find a fitting lowest_mask, make sure we fall back - * to the last known unfitting lowest_mask. - * - * Note that the map of the recorded idx might have changed since then, - * so we must ensure to do the full dance to make sure that level still - * holds a valid lowest_mask. - * - * As per above, the map could have been concurrently emptied while we - * were busy searching for a fitting lowest_mask at the other priority - * levels. + * If we failed to find a fitting lowest_mask, kick off a new search + * but without taking into account any fitness criteria this time. * * This rule favours honouring priority over fitting the task in the * correct CPU (Capacity Awareness being the only user now). @@ -184,8 +167,8 @@ int cpupri_find_fitness(struct cpupri *cp, struct task_struct *p, * must do proper RT planning to avoid overloading the system if they * really care. */ - if (best_unfit_idx != -1) - return __cpupri_find(cp, p, lowest_mask, best_unfit_idx); + if (fitness_fn) + return cpupri_find(cp, p, lowest_mask); return 0; } From 401ecc048be774b51e1ad4a3bfe930cefc6203e8 Mon Sep 17 00:00:00 2001 From: Yurii Zubrytskyi Date: Sun, 29 Mar 2020 14:13:32 -0700 Subject: [PATCH 010/136] ANDROID: Incremental fs: get_filled_blocks: better index_out When returning incomplete results index_out has to be usable to call the function again and resume from the same location. This means that if the output buffer was too small the function needs to check for that when encountering the _beginning_ of a next output range, not the end of it. Otherwise resuming from the end of the range that didn't fit into the buffer would cause the call to never return that range + Make the backing file header flags update thread safe Bug: 152691988 Test: libincfs-test, incfs_test passes Signed-off-by: Yurii Zubrytskyi Change-Id: I351156beba0b74e1942a39117279d3fcdb5e0c78 Signed-off-by: Paul Lawrence --- fs/incfs/data_mgmt.c | 69 +++++++++++++++++++++++++++++++++++++------- fs/incfs/format.c | 2 +- fs/incfs/format.h | 2 +- 3 files changed, 61 insertions(+), 12 deletions(-) diff --git a/fs/incfs/data_mgmt.c b/fs/incfs/data_mgmt.c index 6661ac3b52da..15462b452d59 100644 --- a/fs/incfs/data_mgmt.c +++ b/fs/incfs/data_mgmt.c @@ -371,11 +371,19 @@ static int get_data_file_block(struct data_file *df, int index, return 0; } +static int check_room_for_one_range(u32 size, u32 size_out) +{ + if (size_out + sizeof(struct incfs_filled_range) > size) + return -ERANGE; + return 0; +} + static int copy_one_range(struct incfs_filled_range *range, void __user *buffer, u32 size, u32 *size_out) { - if (*size_out + sizeof(*range) > size) - return -ERANGE; + int error = check_room_for_one_range(size, *size_out); + if (error) + return error; if (copy_to_user(((char *)buffer) + *size_out, range, sizeof(*range))) return -EFAULT; @@ -384,6 +392,34 @@ static int copy_one_range(struct incfs_filled_range *range, void __user *buffer, return 0; } +static int update_file_header_flags(struct data_file *df, u32 bits_to_reset, + u32 bits_to_set) +{ + int result; + u32 new_flags; + struct backing_file_context *bfc; + + if (!df) + return -EFAULT; + bfc = df->df_backing_file_context; + if (!bfc) + return -EFAULT; + + result = mutex_lock_interruptible(&bfc->bc_mutex); + if (result) + return result; + + new_flags = (df->df_header_flags & ~bits_to_reset) | bits_to_set; + if (new_flags != df->df_header_flags) { + df->df_header_flags = new_flags; + result = incfs_write_file_header_flags(bfc, new_flags); + } + + mutex_unlock(&bfc->bc_mutex); + + return result; +} + int incfs_get_filled_blocks(struct data_file *df, struct incfs_get_filled_blocks_args *arg) { @@ -407,14 +443,22 @@ int incfs_get_filled_blocks(struct data_file *df, arg->index_out = arg->start_index; return 0; } + arg->index_out = arg->start_index; + + error = check_room_for_one_range(size, *size_out); + if (error) + return error; range = (struct incfs_filled_range){ .begin = arg->start_index, .end = end_index, }; + error = copy_one_range(&range, buffer, size, size_out); + if (error) + return error; arg->index_out = end_index; - return copy_one_range(&range, buffer, size, size_out); + return 0; } for (arg->index_out = arg->start_index; arg->index_out < end_index; @@ -429,13 +473,20 @@ int incfs_get_filled_blocks(struct data_file *df, continue; if (!in_range) { + error = check_room_for_one_range(size, *size_out); + if (error) + break; in_range = true; range.begin = arg->index_out; } else { range.end = arg->index_out; error = copy_one_range(&range, buffer, size, size_out); - if (error) + if (error) { + /* there will be another try out of the loop, + * it will reset the index_out if it fails too + */ break; + } in_range = false; } } @@ -443,17 +494,15 @@ int incfs_get_filled_blocks(struct data_file *df, if (in_range) { range.end = arg->index_out; error = copy_one_range(&range, buffer, size, size_out); + if (error) + arg->index_out = range.begin; } if (!error && in_range && arg->start_index == 0 && end_index == df->df_total_block_count && *size_out == sizeof(struct incfs_filled_range)) { - int result; - - df->df_header_flags |= INCFS_FILE_COMPLETE; - result = incfs_update_file_header_flags( - df->df_backing_file_context, df->df_header_flags); - + int result = + update_file_header_flags(df, 0, INCFS_FILE_COMPLETE); /* Log failure only, since it's just a failed optimization */ pr_debug("Marked file full with result %d", result); } diff --git a/fs/incfs/format.c b/fs/incfs/format.c index 96f4e3d54f58..1a7c4646a291 100644 --- a/fs/incfs/format.c +++ b/fs/incfs/format.c @@ -215,7 +215,7 @@ static int append_md_to_backing_file(struct backing_file_context *bfc, return result; } -int incfs_update_file_header_flags(struct backing_file_context *bfc, u32 flags) +int incfs_write_file_header_flags(struct backing_file_context *bfc, u32 flags) { if (!bfc) return -EFAULT; diff --git a/fs/incfs/format.h b/fs/incfs/format.h index 33e5ea4eba56..deb5ca5bb0da 100644 --- a/fs/incfs/format.h +++ b/fs/incfs/format.h @@ -311,7 +311,7 @@ int incfs_write_file_attr_to_backing_file(struct backing_file_context *bfc, int incfs_write_signature_to_backing_file(struct backing_file_context *bfc, struct mem_range sig, u32 tree_size); -int incfs_update_file_header_flags(struct backing_file_context *bfc, u32 flags); +int incfs_write_file_header_flags(struct backing_file_context *bfc, u32 flags); int incfs_make_empty_backing_file(struct backing_file_context *bfc, incfs_uuid_t *uuid, u64 file_size); From e928539974ba67ffc9ddd1c83f0733531fc3d406 Mon Sep 17 00:00:00 2001 From: Paul Lawrence Date: Tue, 31 Mar 2020 15:05:33 -0700 Subject: [PATCH 011/136] ANDROID: Incremental fs: Fix crash polling 0 size read_log When read log is 0 sized, we still need to init the wait queue to avoid kernel panics if someone does decide to poll on the read log. Test: Added test for this condition, incfs_test crashes With fix, incfs_test doesn't crash Signed-off-by: Paul Lawrence Bug: 152909243 Change-Id: Ic3250523bb7ddb1839f8e95852c17103e5ffb782 --- fs/incfs/data_mgmt.c | 2 +- .../selftests/filesystems/incfs/incfs_test.c | 55 ++++++++++++++++--- 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/fs/incfs/data_mgmt.c b/fs/incfs/data_mgmt.c index 15462b452d59..bf509e2b0314 100644 --- a/fs/incfs/data_mgmt.c +++ b/fs/incfs/data_mgmt.c @@ -34,13 +34,13 @@ struct mount_info *incfs_alloc_mount_info(struct super_block *sb, mutex_init(&mi->mi_dir_struct_mutex); mutex_init(&mi->mi_pending_reads_mutex); init_waitqueue_head(&mi->mi_pending_reads_notif_wq); + init_waitqueue_head(&mi->mi_log.ml_notif_wq); INIT_LIST_HEAD(&mi->mi_reads_list_head); if (options->read_log_pages != 0) { size_t buf_size = PAGE_SIZE * options->read_log_pages; spin_lock_init(&mi->mi_log.rl_writer_lock); - init_waitqueue_head(&mi->mi_log.ml_notif_wq); mi->mi_log.rl_size = buf_size / sizeof(*mi->mi_log.rl_ring_buf); mi->mi_log.rl_ring_buf = kzalloc(buf_size, GFP_NOFS); diff --git a/tools/testing/selftests/filesystems/incfs/incfs_test.c b/tools/testing/selftests/filesystems/incfs/incfs_test.c index 723f9cbd15bc..3137dad14615 100644 --- a/tools/testing/selftests/filesystems/incfs/incfs_test.c +++ b/tools/testing/selftests/filesystems/incfs/incfs_test.c @@ -1930,7 +1930,8 @@ static int hash_tree_test(char *mount_dir) return TEST_FAILURE; } -static int validate_logs(char *mount_dir, int log_fd, struct test_file *file) +static int validate_logs(char *mount_dir, int log_fd, struct test_file *file, + bool no_rlog) { uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE]; struct incfs_pending_read_info prs[100] = {}; @@ -1957,7 +1958,19 @@ static int validate_logs(char *mount_dir, int log_fd, struct test_file *file) goto failure; } - read_count = wait_for_pending_reads(log_fd, 0, prs, prs_size); + read_count = + wait_for_pending_reads(log_fd, no_rlog ? 10 : 0, prs, prs_size); + if (no_rlog) { + if (read_count == 0) + goto success; + if (read_count < 0) + ksft_print_msg("Error reading logged reads %s.\n", + strerror(-read_count)); + else + ksft_print_msg("Somehow read empty logs.\n"); + goto failure; + } + if (read_count < 0) { ksft_print_msg("Error reading logged reads %s.\n", strerror(-read_count)); @@ -2001,6 +2014,8 @@ static int validate_logs(char *mount_dir, int log_fd, struct test_file *file) goto failure; } } + +success: close(fd); return TEST_SUCCESS; @@ -2029,7 +2044,7 @@ static int read_log_test(char *mount_dir) goto failure; log_fd = open_log_file(mount_dir); - if (cmd_fd < 0) + if (log_fd < 0) ksft_print_msg("Can't open log file.\n"); /* Write data. */ @@ -2048,7 +2063,7 @@ static int read_log_test(char *mount_dir) for (i = 0; i < file_num; i++) { struct test_file *file = &test.files[i]; - if (validate_logs(mount_dir, log_fd, file)) + if (validate_logs(mount_dir, log_fd, file, false)) goto failure; } @@ -2069,19 +2084,45 @@ static int read_log_test(char *mount_dir) goto failure; log_fd = open_log_file(mount_dir); - if (cmd_fd < 0) + if (log_fd < 0) ksft_print_msg("Can't open log file.\n"); /* Validate data again */ for (i = 0; i < file_num; i++) { struct test_file *file = &test.files[i]; - if (validate_logs(mount_dir, log_fd, file)) + if (validate_logs(mount_dir, log_fd, file, false)) + goto failure; + } + + /* + * Unmount and mount again with no read log to make sure poll + * doesn't crash + */ + close(cmd_fd); + close(log_fd); + if (umount(mount_dir) != 0) { + print_error("Can't unmout FS"); + goto failure; + } + + if (mount_fs_opt(mount_dir, backing_dir, "readahead=0,rlog_pages=0") != + 0) + goto failure; + + log_fd = open_log_file(mount_dir); + if (log_fd < 0) + ksft_print_msg("Can't open log file.\n"); + + /* Validate data again - note should fail this time */ + for (i = 0; i < file_num; i++) { + struct test_file *file = &test.files[i]; + + if (validate_logs(mount_dir, log_fd, file, true)) goto failure; } /* Final unmount */ - close(cmd_fd); close(log_fd); free(backing_dir); if (umount(mount_dir) != 0) { From f3dbe000a85fdfb6f23d6d42fe8a1802eb291650 Mon Sep 17 00:00:00 2001 From: Paul Lawrence Date: Wed, 1 Apr 2020 10:15:12 -0700 Subject: [PATCH 012/136] ANDROID: Incremental fs: Protect get_fill_block, and add a field Since INCFS_IOC_GET_FILLED_BLOCKS potentially leaks information about usage patterns, and is only useful to someone filling the file, best protect it in the same way as INCFS_IOC_FILL_BLOCKS. Add useful field data_block_out as well Test: incfs_test passes Bug: 152983639 Signed-off-by: Paul Lawrence Change-Id: I126a8cf711e56592479093e9aadbfd0e7f700752 --- fs/incfs/data_mgmt.c | 1 + fs/incfs/vfs.c | 3 ++ include/uapi/linux/incrementalfs.h | 3 ++ .../selftests/filesystems/incfs/incfs_test.c | 52 +++++++++++++++++++ 4 files changed, 59 insertions(+) diff --git a/fs/incfs/data_mgmt.c b/fs/incfs/data_mgmt.c index bf509e2b0314..c0248de8949b 100644 --- a/fs/incfs/data_mgmt.c +++ b/fs/incfs/data_mgmt.c @@ -436,6 +436,7 @@ int incfs_get_filled_blocks(struct data_file *df, if (end_index > df->df_total_block_count) end_index = df->df_total_block_count; arg->total_blocks_out = df->df_total_block_count; + arg->data_blocks_out = df->df_data_block_count; if (df->df_header_flags & INCFS_FILE_COMPLETE) { pr_debug("File marked full, fast get_filled_blocks"); diff --git a/fs/incfs/vfs.c b/fs/incfs/vfs.c index 417064cadb31..5961ff91a07b 100644 --- a/fs/incfs/vfs.c +++ b/fs/incfs/vfs.c @@ -1445,6 +1445,9 @@ static long ioctl_get_filled_blocks(struct file *f, void __user *arg) if (!df) return -EINVAL; + if ((uintptr_t)f->private_data != CAN_FILL) + return -EPERM; + if (copy_from_user(&args, args_usr_ptr, sizeof(args)) > 0) return -EINVAL; diff --git a/include/uapi/linux/incrementalfs.h b/include/uapi/linux/incrementalfs.h index 2d535d365ce9..13c3d5173e14 100644 --- a/include/uapi/linux/incrementalfs.h +++ b/include/uapi/linux/incrementalfs.h @@ -321,6 +321,9 @@ struct incfs_get_filled_blocks_args { /* Actual number of blocks in file */ __u32 total_blocks_out; + /* The number of data blocks in file */ + __u32 data_blocks_out; + /* Number of bytes written to range buffer */ __u32 range_buffer_size_out; diff --git a/tools/testing/selftests/filesystems/incfs/incfs_test.c b/tools/testing/selftests/filesystems/incfs/incfs_test.c index 3137dad14615..15a34a8469ba 100644 --- a/tools/testing/selftests/filesystems/incfs/incfs_test.c +++ b/tools/testing/selftests/filesystems/incfs/incfs_test.c @@ -2189,12 +2189,29 @@ static int validate_ranges(const char *mount_dir, struct test_file *file) int error = TEST_SUCCESS; int i; int range_cnt; + int cmd_fd = -1; + struct incfs_permit_fill permit_fill; fd = open(filename, O_RDONLY); free(filename); if (fd <= 0) return TEST_FAILURE; + error = ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba); + if (error != -1 || errno != EPERM) { + ksft_print_msg("INCFS_IOC_GET_FILLED_BLOCKS not blocked\n"); + error = -EPERM; + goto out; + } + + cmd_fd = open_commands_file(mount_dir); + permit_fill.file_descriptor = fd; + if (ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill)) { + print_error("INCFS_IOC_PERMIT_FILL failed"); + return -EPERM; + goto out; + } + error = ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba); if (error && errno != ERANGE) goto out; @@ -2212,6 +2229,11 @@ static int validate_ranges(const char *mount_dir, struct test_file *file) goto out; } + if (fba.data_blocks_out != block_cnt) { + error = -EINVAL; + goto out; + } + range_cnt = (block_cnt + 3) / 4; if (range_cnt > 128) range_cnt = 128; @@ -2282,6 +2304,7 @@ static int validate_ranges(const char *mount_dir, struct test_file *file) out: close(fd); + close(cmd_fd); return error; } @@ -2392,6 +2415,7 @@ static int emit_partial_test_file_hash(char *mount_dir, struct test_file *file) static int validate_hash_ranges(const char *mount_dir, struct test_file *file) { + int block_cnt = 1 + (file->size - 1) / INCFS_DATA_FILE_BLOCK_SIZE; char *filename = concat_file_name(mount_dir, file->name); int fd; struct incfs_filled_range ranges[128]; @@ -2402,6 +2426,8 @@ static int validate_hash_ranges(const char *mount_dir, struct test_file *file) int error = TEST_SUCCESS; int file_blocks = (file->size + INCFS_DATA_FILE_BLOCK_SIZE - 1) / INCFS_DATA_FILE_BLOCK_SIZE; + int cmd_fd = -1; + struct incfs_permit_fill permit_fill; if (file->size <= 4096 / 32 * 4096) return 0; @@ -2411,10 +2437,35 @@ static int validate_hash_ranges(const char *mount_dir, struct test_file *file) if (fd <= 0) return TEST_FAILURE; + error = ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba); + if (error != -1 || errno != EPERM) { + ksft_print_msg("INCFS_IOC_GET_FILLED_BLOCKS not blocked\n"); + error = -EPERM; + goto out; + } + + cmd_fd = open_commands_file(mount_dir); + permit_fill.file_descriptor = fd; + if (ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill)) { + print_error("INCFS_IOC_PERMIT_FILL failed"); + return -EPERM; + goto out; + } + error = ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba); if (error) goto out; + if (fba.total_blocks_out <= block_cnt) { + error = -EINVAL; + goto out; + } + + if (fba.data_blocks_out != block_cnt) { + error = -EINVAL; + goto out; + } + if (fba.range_buffer_size_out != sizeof(struct incfs_filled_range)) { error = -EINVAL; goto out; @@ -2427,6 +2478,7 @@ static int validate_hash_ranges(const char *mount_dir, struct test_file *file) } out: + close(cmd_fd); close(fd); return error; } From bbff2f1909f7d2a11148e932b278bdd0f3da3870 Mon Sep 17 00:00:00 2001 From: Paul Lawrence Date: Wed, 1 Apr 2020 16:04:39 -0700 Subject: [PATCH 013/136] ANDROID: Incremental fs: Fix remount Bug: 153017385 Test: incfs_test passes Signed-off-by: Paul Lawrence Change-Id: I13f3a3c91d746d725e0e21b1e2bcfe0a64a13716 --- fs/incfs/data_mgmt.c | 37 ++++++++++++------- fs/incfs/data_mgmt.h | 3 ++ fs/incfs/vfs.c | 7 ++-- .../selftests/filesystems/incfs/incfs_test.c | 37 +++++++++++++++---- .../selftests/filesystems/incfs/utils.c | 5 ++- .../selftests/filesystems/incfs/utils.h | 2 +- 6 files changed, 64 insertions(+), 27 deletions(-) diff --git a/fs/incfs/data_mgmt.c b/fs/incfs/data_mgmt.c index c0248de8949b..91541b46f771 100644 --- a/fs/incfs/data_mgmt.c +++ b/fs/incfs/data_mgmt.c @@ -27,7 +27,6 @@ struct mount_info *incfs_alloc_mount_info(struct super_block *sb, return ERR_PTR(-ENOMEM); mi->mi_sb = sb; - mi->mi_options = *options; mi->mi_backing_dir_path = *backing_dir_path; mi->mi_owner = get_current_cred(); path_get(&mi->mi_backing_dir_path); @@ -35,20 +34,12 @@ struct mount_info *incfs_alloc_mount_info(struct super_block *sb, mutex_init(&mi->mi_pending_reads_mutex); init_waitqueue_head(&mi->mi_pending_reads_notif_wq); init_waitqueue_head(&mi->mi_log.ml_notif_wq); + spin_lock_init(&mi->mi_log.rl_writer_lock); INIT_LIST_HEAD(&mi->mi_reads_list_head); - if (options->read_log_pages != 0) { - size_t buf_size = PAGE_SIZE * options->read_log_pages; - - spin_lock_init(&mi->mi_log.rl_writer_lock); - - mi->mi_log.rl_size = buf_size / sizeof(*mi->mi_log.rl_ring_buf); - mi->mi_log.rl_ring_buf = kzalloc(buf_size, GFP_NOFS); - if (!mi->mi_log.rl_ring_buf) { - error = -ENOMEM; - goto err; - } - } + error = incfs_realloc_mount_info(mi, options); + if (error) + goto err; return mi; @@ -57,6 +48,26 @@ struct mount_info *incfs_alloc_mount_info(struct super_block *sb, return ERR_PTR(error); } +int incfs_realloc_mount_info(struct mount_info *mi, + struct mount_options *options) +{ + kfree(mi->mi_log.rl_ring_buf); + mi->mi_log.rl_ring_buf = NULL; + mi->mi_log.rl_size = 0; + + mi->mi_options = *options; + if (options->read_log_pages != 0) { + size_t buf_size = PAGE_SIZE * options->read_log_pages; + + mi->mi_log.rl_size = buf_size / sizeof(*mi->mi_log.rl_ring_buf); + mi->mi_log.rl_ring_buf = kzalloc(buf_size, GFP_NOFS); + if (!mi->mi_log.rl_ring_buf) + return -ENOMEM; + } + + return 0; +} + void incfs_free_mount_info(struct mount_info *mi) { if (!mi) diff --git a/fs/incfs/data_mgmt.h b/fs/incfs/data_mgmt.h index bd9b63af920e..e8f2154c80d9 100644 --- a/fs/incfs/data_mgmt.h +++ b/fs/incfs/data_mgmt.h @@ -223,6 +223,9 @@ struct mount_info *incfs_alloc_mount_info(struct super_block *sb, struct mount_options *options, struct path *backing_dir_path); +int incfs_realloc_mount_info(struct mount_info *mi, + struct mount_options *options); + void incfs_free_mount_info(struct mount_info *mi); struct data_file *incfs_open_data_file(struct mount_info *mi, struct file *bf); diff --git a/fs/incfs/vfs.c b/fs/incfs/vfs.c index 5961ff91a07b..7c9982c2708b 100644 --- a/fs/incfs/vfs.c +++ b/fs/incfs/vfs.c @@ -2216,10 +2216,9 @@ static int incfs_remount_fs(struct super_block *sb, int *flags, char *data) if (err) return err; - if (mi->mi_options.read_timeout_ms != options.read_timeout_ms) { - mi->mi_options.read_timeout_ms = options.read_timeout_ms; - pr_debug("incfs: new timeout_ms=%d", options.read_timeout_ms); - } + err = incfs_realloc_mount_info(mi, &options); + if (err) + return err; pr_debug("incfs: remount\n"); return 0; diff --git a/tools/testing/selftests/filesystems/incfs/incfs_test.c b/tools/testing/selftests/filesystems/incfs/incfs_test.c index 15a34a8469ba..3ba41bd75efe 100644 --- a/tools/testing/selftests/filesystems/incfs/incfs_test.c +++ b/tools/testing/selftests/filesystems/incfs/incfs_test.c @@ -2029,14 +2029,14 @@ static int read_log_test(char *mount_dir) struct test_files_set test = get_test_files_set(); const int file_num = test.files_count; int i = 0; - int cmd_fd = -1, log_fd = -1; + int cmd_fd = -1, log_fd = -1, drop_caches = -1; char *backing_dir; backing_dir = create_backing_dir(mount_dir); if (!backing_dir) goto failure; - if (mount_fs_opt(mount_dir, backing_dir, "readahead=0") != 0) + if (mount_fs_opt(mount_dir, backing_dir, "readahead=0", false) != 0) goto failure; cmd_fd = open_commands_file(mount_dir); @@ -2076,7 +2076,7 @@ static int read_log_test(char *mount_dir) goto failure; } - if (mount_fs_opt(mount_dir, backing_dir, "readahead=0") != 0) + if (mount_fs_opt(mount_dir, backing_dir, "readahead=0", false) != 0) goto failure; cmd_fd = open_commands_file(mount_dir); @@ -2106,8 +2106,8 @@ static int read_log_test(char *mount_dir) goto failure; } - if (mount_fs_opt(mount_dir, backing_dir, "readahead=0,rlog_pages=0") != - 0) + if (mount_fs_opt(mount_dir, backing_dir, "readahead=0,rlog_pages=0", + false) != 0) goto failure; log_fd = open_log_file(mount_dir); @@ -2122,6 +2122,29 @@ static int read_log_test(char *mount_dir) goto failure; } + /* + * Remount and check that logs start working again + */ + drop_caches = open("/proc/sys/vm/drop_caches", O_WRONLY); + if (drop_caches == -1) + goto failure; + i = write(drop_caches, "3", 1); + close(drop_caches); + if (i != 1) + goto failure; + + if (mount_fs_opt(mount_dir, backing_dir, "readahead=0,rlog_pages=4", + true) != 0) + goto failure; + + /* Validate data again */ + for (i = 0; i < file_num; i++) { + struct test_file *file = &test.files[i]; + + if (validate_logs(mount_dir, log_fd, file, false)) + goto failure; + } + /* Final unmount */ close(log_fd); free(backing_dir); @@ -2320,7 +2343,7 @@ static int get_blocks_test(char *mount_dir) if (!backing_dir) goto failure; - if (mount_fs_opt(mount_dir, backing_dir, "readahead=0") != 0) + if (mount_fs_opt(mount_dir, backing_dir, "readahead=0", false) != 0) goto failure; cmd_fd = open_commands_file(mount_dir); @@ -2495,7 +2518,7 @@ static int get_hash_blocks_test(char *mount_dir) if (!backing_dir) goto failure; - if (mount_fs_opt(mount_dir, backing_dir, "readahead=0") != 0) + if (mount_fs_opt(mount_dir, backing_dir, "readahead=0", false) != 0) goto failure; cmd_fd = open_commands_file(mount_dir); diff --git a/tools/testing/selftests/filesystems/incfs/utils.c b/tools/testing/selftests/filesystems/incfs/utils.c index 3a72fa5d5e9a..545497685d14 100644 --- a/tools/testing/selftests/filesystems/incfs/utils.c +++ b/tools/testing/selftests/filesystems/incfs/utils.c @@ -41,12 +41,13 @@ int mount_fs(const char *mount_dir, const char *backing_dir, } int mount_fs_opt(const char *mount_dir, const char *backing_dir, - const char *opt) + const char *opt, bool remount) { static const char fs_name[] = INCFS_NAME; int result; - result = mount(backing_dir, mount_dir, fs_name, 0, opt); + result = mount(backing_dir, mount_dir, fs_name, + remount ? MS_REMOUNT : 0, opt); if (result != 0) perror("Error mounting fs."); return result; diff --git a/tools/testing/selftests/filesystems/incfs/utils.h b/tools/testing/selftests/filesystems/incfs/utils.h index 23c8a099662a..24b43287fcdd 100644 --- a/tools/testing/selftests/filesystems/incfs/utils.h +++ b/tools/testing/selftests/filesystems/incfs/utils.h @@ -23,7 +23,7 @@ int mount_fs(const char *mount_dir, const char *backing_dir, int read_timeout_ms); int mount_fs_opt(const char *mount_dir, const char *backing_dir, - const char *opt); + const char *opt, bool remount); int get_file_bmap(int cmd_fd, int ino, unsigned char *buf, int buf_size); From 2a3049590d575e5cc4eb333a63f8ec58eb4d9988 Mon Sep 17 00:00:00 2001 From: Alistair Delva Date: Thu, 2 Apr 2020 13:56:04 -0700 Subject: [PATCH 014/136] ANDROID: Fix wq fp check for CFI builds A previous change added a test on the wrong config flag; rename CFI to CFI_CLANG. Bug: 145210207 Change-Id: Id8aead2eb2c75ad6442d10165f6cb86ccfb9c2f9 Signed-off-by: Alistair Delva --- kernel/workqueue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 3fdd25098876..81d99906a97c 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -1627,7 +1627,7 @@ static void __queue_delayed_work(int cpu, struct workqueue_struct *wq, struct work_struct *work = &dwork->work; WARN_ON_ONCE(!wq); -#ifndef CONFIG_CFI +#ifndef CONFIG_CFI_CLANG WARN_ON_ONCE(timer->function != delayed_work_timer_fn); #endif WARN_ON_ONCE(timer_pending(timer)); From b9d3d8f1e991052edb89b0537b8f2e8b2aa941ac Mon Sep 17 00:00:00 2001 From: Mark Salyzyn Date: Mon, 24 Feb 2020 14:40:49 -0800 Subject: [PATCH 015/136] ANDROID: GKI: cma: redirect page allocation to CMA CMA pages are designed to be used as fallback for movable allocations and cannot be used for non-movable allocations. If CMA pages are utilized poorly, non-movable allocations may end up getting starved if all regular movable pages are allocated and the only pages left are CMA. Always using CMA pages first creates unacceptable performance problems. As a midway alternative, use CMA pages for certain userspace allocations. The userspace pages can be migrated or dropped quickly which giving decent utilization. Change-Id: I6165dda01b705309eebabc6dfa67146b7a95c174 Signed-off-by: Kyungmin Park Signed-off-by: Heesub Shin [lauraa@codeaurora.org: Missing CONFIG_CMA guards, add commit text] Signed-off-by: Laura Abbott [lmark@codeaurora.org: resolve conflicts relating to MIGRATE_HIGHATOMIC] Signed-off-by: Liam Mark Signed-off-by: Vinayak Menon Signed-off-by: Charan Teja Reddy [swatsrid@codeaurora.org: Fix merge conflicts] Signed-off-by: Swathi Sridhar (cherry picked from commit 46f8fca539686ce8493ff82206f9de2d07c9d72c) Signed-off-by: Mark Salyzyn Bug: 150378964 Bug: 142290962 [tkjos@google.com: ANDROID: Fix kernelci build-break on !CONFIG_CMA builds] Signed-off-by: Todd Kjos --- include/linux/gfp.h | 9 +++++- include/linux/highmem.h | 5 +++ include/linux/mmzone.h | 4 +++ mm/page_alloc.c | 68 ++++++++++++++++++++++++++++++++--------- 4 files changed, 70 insertions(+), 16 deletions(-) diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 61f2f6ff9467..d8a9836e0ead 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -44,6 +44,7 @@ struct vm_area_struct; #else #define ___GFP_NOLOCKDEP 0 #endif +#define ___GFP_CMA 0x1000000u /* If the above are modified, __GFP_BITS_SHIFT may need updating */ /* @@ -57,6 +58,7 @@ struct vm_area_struct; #define __GFP_HIGHMEM ((__force gfp_t)___GFP_HIGHMEM) #define __GFP_DMA32 ((__force gfp_t)___GFP_DMA32) #define __GFP_MOVABLE ((__force gfp_t)___GFP_MOVABLE) /* ZONE_MOVABLE allowed */ +#define __GFP_CMA ((__force gfp_t)___GFP_CMA) #define GFP_ZONEMASK (__GFP_DMA|__GFP_HIGHMEM|__GFP_DMA32|__GFP_MOVABLE) /** @@ -217,8 +219,13 @@ struct vm_area_struct; #define __GFP_NOLOCKDEP ((__force gfp_t)___GFP_NOLOCKDEP) /* Room for N __GFP_FOO bits */ -#define __GFP_BITS_SHIFT (23 + IS_ENABLED(CONFIG_LOCKDEP)) +#define __GFP_BITS_SHIFT (25) +#ifdef CONFIG_LOCKDEP #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) +#else +#define __GFP_BITS_MASK (((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) & \ + ~0x800000u) +#endif /** * DOC: Useful GFP flag combinations diff --git a/include/linux/highmem.h b/include/linux/highmem.h index ea5cdbd8c2c3..9d6afc38bed1 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h @@ -205,7 +205,12 @@ static inline struct page * alloc_zeroed_user_highpage_movable(struct vm_area_struct *vma, unsigned long vaddr) { +#ifndef CONFIG_CMA return __alloc_zeroed_user_highpage(__GFP_MOVABLE, vma, vaddr); +#else + return __alloc_zeroed_user_highpage(__GFP_MOVABLE|__GFP_CMA, vma, + vaddr); +#endif } static inline void clear_highpage(struct page *page) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 7a7cf11200f9..493bcb5b18d9 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -444,6 +444,10 @@ struct zone { struct pglist_data *zone_pgdat; struct per_cpu_pageset __percpu *pageset; +#ifdef CONFIG_CMA + bool cma_alloc; +#endif + #ifndef CONFIG_SPARSEMEM /* * Flags for a pageblock_nr_pages block. See pageblock-flags.h. diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 323faf5229d2..d24a6c86e12b 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2725,14 +2725,32 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype, retry: page = __rmqueue_smallest(zone, order, migratetype); - if (unlikely(!page)) { - if (migratetype == MIGRATE_MOVABLE) - page = __rmqueue_cma_fallback(zone, order); - if (!page && __rmqueue_fallback(zone, order, migratetype, - alloc_flags)) - goto retry; - } + if (unlikely(!page) && __rmqueue_fallback(zone, order, migratetype, + alloc_flags)) + goto retry; + + trace_mm_page_alloc_zone_locked(page, order, migratetype); + return page; +} + +static struct page *__rmqueue_cma(struct zone *zone, unsigned int order, + int migratetype, + unsigned int alloc_flags) +{ + struct page *page = 0; + +retry: +#ifdef CONFIG_CMA + if (migratetype == MIGRATE_MOVABLE && !zone->cma_alloc) + page = __rmqueue_cma_fallback(zone, order); + else +#endif + page = __rmqueue_smallest(zone, order, migratetype); + + if (unlikely(!page) && __rmqueue_fallback(zone, order, migratetype, + alloc_flags)) + goto retry; trace_mm_page_alloc_zone_locked(page, order, migratetype); return page; @@ -2745,14 +2763,20 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype, */ static int rmqueue_bulk(struct zone *zone, unsigned int order, unsigned long count, struct list_head *list, - int migratetype, unsigned int alloc_flags) + int migratetype, unsigned int alloc_flags, int cma) { int i, alloced = 0; spin_lock(&zone->lock); for (i = 0; i < count; ++i) { - struct page *page = __rmqueue(zone, order, migratetype, - alloc_flags); + struct page *page; + + if (cma) + page = __rmqueue_cma(zone, order, migratetype, + alloc_flags); + else + page = __rmqueue(zone, order, migratetype, alloc_flags); + if (unlikely(page == NULL)) break; @@ -3216,7 +3240,7 @@ static inline void zone_statistics(struct zone *preferred_zone, struct zone *z) static struct page *__rmqueue_pcplist(struct zone *zone, int migratetype, unsigned int alloc_flags, struct per_cpu_pages *pcp, - struct list_head *list) + struct list_head *list, gfp_t gfp_flags) { struct page *page; @@ -3224,7 +3248,8 @@ static struct page *__rmqueue_pcplist(struct zone *zone, int migratetype, if (list_empty(list)) { pcp->count += rmqueue_bulk(zone, 0, pcp->batch, list, - migratetype, alloc_flags); + migratetype, alloc_flags, + gfp_flags & __GFP_CMA); if (unlikely(list_empty(list))) return NULL; } @@ -3250,7 +3275,8 @@ static struct page *rmqueue_pcplist(struct zone *preferred_zone, local_irq_save(flags); pcp = &this_cpu_ptr(zone->pageset)->pcp; list = &pcp->lists[migratetype]; - page = __rmqueue_pcplist(zone, migratetype, alloc_flags, pcp, list); + page = __rmqueue_pcplist(zone, migratetype, alloc_flags, pcp, list, + gfp_flags); if (page) { __count_zid_vm_events(PGALLOC, page_zonenum(page), 1); zone_statistics(preferred_zone, zone); @@ -3291,8 +3317,14 @@ struct page *rmqueue(struct zone *preferred_zone, if (page) trace_mm_page_alloc_zone_locked(page, order, migratetype); } - if (!page) - page = __rmqueue(zone, order, migratetype, alloc_flags); + if (!page) { + if (gfp_flags & __GFP_CMA) + page = __rmqueue_cma(zone, order, migratetype, + alloc_flags); + else + page = __rmqueue(zone, order, migratetype, + alloc_flags); + } } while (page && check_new_pages(page, order)); spin_unlock(&zone->lock); if (!page) @@ -8442,6 +8474,9 @@ int alloc_contig_range(unsigned long start, unsigned long end, if (ret < 0) return ret; +#ifdef CONFIG_CMA + cc.zone->cma_alloc = 1; +#endif /* * In case of -EBUSY, we'd like to know which page causes problem. * So, just fall through. test_pages_isolated() has a tracepoint @@ -8523,6 +8558,9 @@ int alloc_contig_range(unsigned long start, unsigned long end, done: undo_isolate_page_range(pfn_max_align_down(start), pfn_max_align_up(end), migratetype); +#ifdef CONFIG_CMA + cc.zone->cma_alloc = 0; +#endif return ret; } #endif /* CONFIG_CONTIG_ALLOC */ From dd1c26b8535eafdb64836cd63deaaa68962a8d92 Mon Sep 17 00:00:00 2001 From: Liam Mark Date: Mon, 23 Jun 2014 14:13:47 -0700 Subject: [PATCH 016/136] ANDROID: GKI: mm: add cma pcp list Add a cma pcp list in order to increase cma memory utilization. Increased cma memory utilization will improve overall memory utilization because free cma pages are ignored when memory reclaim is done with gfp mask GFP_KERNEL. Since most memory reclaim is done by kswapd, which uses a gfp mask of GFP_KERNEL, by increasing cma memory utilization we are therefore ensuring that less aggressive memory reclaim takes place. Increased cma memory utilization will improve performance, for example it will increase app concurrency. Change-Id: I809589a25c6abca51f1c963f118adfc78e955cf9 Signed-off-by: Liam Mark [vinmenon@codeaurora.org: fix !CONFIG_CMA compile time issues] Signed-off-by: Vinayak Menon Signed-off-by: Charan Teja Reddy [swatsrid@codeaurora.org: Fix merge conflicts] Signed-off-by: Swathi Sridhar (cherry picked from commit 0caf6be3e0842302ecd54c9e75943ca4133f4c7a) Signed-off-by: Mark Salyzyn Bug: 150378964 Bug: 142290962 Signed-off-by: Todd Kjos --- include/linux/mmzone.h | 6 ++- mm/page_alloc.c | 112 +++++++++++++++++++++++++++-------------- 2 files changed, 79 insertions(+), 39 deletions(-) diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 493bcb5b18d9..0eb66b3f02a4 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -43,8 +43,6 @@ enum migratetype { MIGRATE_UNMOVABLE, MIGRATE_MOVABLE, MIGRATE_RECLAIMABLE, - MIGRATE_PCPTYPES, /* the number of types on the pcp lists */ - MIGRATE_HIGHATOMIC = MIGRATE_PCPTYPES, #ifdef CONFIG_CMA /* * MIGRATE_CMA migration type is designed to mimic the way @@ -61,6 +59,8 @@ enum migratetype { */ MIGRATE_CMA, #endif + MIGRATE_PCPTYPES, /* the number of types on the pcp lists */ + MIGRATE_HIGHATOMIC = MIGRATE_PCPTYPES, #ifdef CONFIG_MEMORY_ISOLATION MIGRATE_ISOLATE, /* can't allocate from here */ #endif @@ -73,9 +73,11 @@ extern const char * const migratetype_names[MIGRATE_TYPES]; #ifdef CONFIG_CMA # define is_migrate_cma(migratetype) unlikely((migratetype) == MIGRATE_CMA) # define is_migrate_cma_page(_page) (get_pageblock_migratetype(_page) == MIGRATE_CMA) +# define get_cma_migrate_type() MIGRATE_CMA #else # define is_migrate_cma(migratetype) false # define is_migrate_cma_page(_page) false +# define get_cma_migrate_type() MIGRATE_MOVABLE #endif static inline bool is_migrate_movable(int mt) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index d24a6c86e12b..f818142a3750 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -293,10 +293,10 @@ const char * const migratetype_names[MIGRATE_TYPES] = { "Unmovable", "Movable", "Reclaimable", - "HighAtomic", #ifdef CONFIG_CMA "CMA", #endif + "HighAtomic", #ifdef CONFIG_MEMORY_ISOLATION "Isolate", #endif @@ -2734,27 +2734,27 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype, return page; } +#ifdef CONFIG_CMA static struct page *__rmqueue_cma(struct zone *zone, unsigned int order, - int migratetype, - unsigned int alloc_flags) + int migratetype, + unsigned int alloc_flags) { struct page *page = 0; -retry: -#ifdef CONFIG_CMA - if (migratetype == MIGRATE_MOVABLE && !zone->cma_alloc) - page = __rmqueue_cma_fallback(zone, order); - else -#endif - page = __rmqueue_smallest(zone, order, migratetype); - - if (unlikely(!page) && __rmqueue_fallback(zone, order, migratetype, - alloc_flags)) - goto retry; - - trace_mm_page_alloc_zone_locked(page, order, migratetype); + if (IS_ENABLED(CONFIG_CMA)) + if (!zone->cma_alloc) + page = __rmqueue_cma_fallback(zone, order); + trace_mm_page_alloc_zone_locked(page, order, MIGRATE_CMA); return page; } +#else +static inline struct page *__rmqueue_cma(struct zone *zone, unsigned int order, + int migratetype, + unsigned int alloc_flags) +{ + return NULL; +} +#endif /* * Obtain a specified number of elements from the buddy allocator, all under @@ -2763,7 +2763,7 @@ static struct page *__rmqueue_cma(struct zone *zone, unsigned int order, */ static int rmqueue_bulk(struct zone *zone, unsigned int order, unsigned long count, struct list_head *list, - int migratetype, unsigned int alloc_flags, int cma) + int migratetype, unsigned int alloc_flags) { int i, alloced = 0; @@ -2771,7 +2771,12 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order, for (i = 0; i < count; ++i) { struct page *page; - if (cma) + /* + * If migrate type CMA is being requested only try to + * satisfy the request with CMA pages to try and increase + * CMA utlization. + */ + if (is_migrate_cma(migratetype)) page = __rmqueue_cma(zone, order, migratetype, alloc_flags); else @@ -2811,6 +2816,28 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order, return alloced; } +/* + * Return the pcp list that corresponds to the migrate type if that list isn't + * empty. + * If the list is empty return NULL. + */ +static struct list_head *get_populated_pcp_list(struct zone *zone, + unsigned int order, struct per_cpu_pages *pcp, + int migratetype, unsigned int alloc_flags) +{ + struct list_head *list = &pcp->lists[migratetype]; + + if (list_empty(list)) { + pcp->count += rmqueue_bulk(zone, order, + pcp->batch, list, + migratetype, alloc_flags); + + if (list_empty(list)) + list = NULL; + } + return list; +} + #ifdef CONFIG_NUMA /* * Called from the vmstat counter updater to drain pagesets of this @@ -3240,17 +3267,28 @@ static inline void zone_statistics(struct zone *preferred_zone, struct zone *z) static struct page *__rmqueue_pcplist(struct zone *zone, int migratetype, unsigned int alloc_flags, struct per_cpu_pages *pcp, - struct list_head *list, gfp_t gfp_flags) + gfp_t gfp_flags) { - struct page *page; + struct page *page = NULL; + struct list_head *list = NULL; do { - if (list_empty(list)) { - pcp->count += rmqueue_bulk(zone, 0, - pcp->batch, list, - migratetype, alloc_flags, - gfp_flags & __GFP_CMA); - if (unlikely(list_empty(list))) + /* First try to get CMA pages */ + if (migratetype == MIGRATE_MOVABLE && + gfp_flags & __GFP_CMA) { + list = get_populated_pcp_list(zone, 0, pcp, + get_cma_migrate_type(), alloc_flags); + } + + if (list == NULL) { + /* + * Either CMA is not suitable or there are no + * free CMA pages. + */ + list = get_populated_pcp_list(zone, 0, pcp, + migratetype, alloc_flags); + if (unlikely(list == NULL) || + unlikely(list_empty(list))) return NULL; } @@ -3268,14 +3306,12 @@ static struct page *rmqueue_pcplist(struct zone *preferred_zone, int migratetype, unsigned int alloc_flags) { struct per_cpu_pages *pcp; - struct list_head *list; struct page *page; unsigned long flags; local_irq_save(flags); pcp = &this_cpu_ptr(zone->pageset)->pcp; - list = &pcp->lists[migratetype]; - page = __rmqueue_pcplist(zone, migratetype, alloc_flags, pcp, list, + page = __rmqueue_pcplist(zone, migratetype, alloc_flags, pcp, gfp_flags); if (page) { __count_zid_vm_events(PGALLOC, page_zonenum(page), 1); @@ -3312,20 +3348,22 @@ struct page *rmqueue(struct zone *preferred_zone, do { page = NULL; + if (alloc_flags & ALLOC_HARDER) { page = __rmqueue_smallest(zone, order, MIGRATE_HIGHATOMIC); if (page) trace_mm_page_alloc_zone_locked(page, order, migratetype); } - if (!page) { - if (gfp_flags & __GFP_CMA) - page = __rmqueue_cma(zone, order, migratetype, - alloc_flags); - else - page = __rmqueue(zone, order, migratetype, - alloc_flags); - } + + if (!page && migratetype == MIGRATE_MOVABLE && + gfp_flags & __GFP_CMA) + page = __rmqueue_cma(zone, order, migratetype, + alloc_flags); + + if (!page) + page = __rmqueue(zone, order, migratetype, alloc_flags); } while (page && check_new_pages(page, order)); + spin_unlock(&zone->lock); if (!page) goto failed; From bb34193d1edc2c8a5ac87ac59d8e410632fc092f Mon Sep 17 00:00:00 2001 From: Todd Kjos Date: Fri, 3 Apr 2020 14:49:14 -0700 Subject: [PATCH 017/136] ANDROID: GKI: Fix ABI for CMA page allocation Leaf changes summary: 4 artifacts changed Changed leaf types summary: 4 leaf types changed Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 0 Added function Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable 'struct per_cpu_pages at mmzone.h:336:1' changed: type size changed from 512 to 640 (in bits) there are data member changes: type 'list_head[3]' of 'per_cpu_pages::lists' changed: type name changed from 'list_head[3]' to 'list_head[4]' array type size changed from 384 to 512 array type subrange 1 changed length from 3 to 4 and size changed from 384 to 512 (in bits) (by +128 bits) 38 impacted interfaces: function int __netlink_dump_start(sock*, sk_buff*, const nlmsghdr*, netlink_dump_control*) function sock* __netlink_kernel_create(net*, int, module*, netlink_kernel_cfg*) function void __sock_recv_ts_and_drops(msghdr*, sock*, sk_buff*) function sock* bt_accept_dequeue(sock*, socket*) function void bt_accept_enqueue(sock*, sock*, bool) function void bt_accept_unlink(sock*) function void bt_sock_link(bt_sock_list*, sock*) function void bt_sock_reclassify_lock(sock*, int) function void bt_sock_unlink(bt_sock_list*, sock*) function int bt_sock_wait_ready(sock*, unsigned long int) function int bt_sock_wait_state(sock*, int, unsigned long int) function void dev_add_pack(packet_type*) function void dev_remove_pack(packet_type*) function int ip6_local_out(net*, sock*, sk_buff*) function dst_entry* ip6_route_output_flags(net*, const sock*, flowi6*, int) function int ip_local_out(net*, sock*, sk_buff*) function rtable* ip_route_output_flow(net*, flowi4*, const sock*) function void lock_sock_nested(sock*, int) function void mod_node_page_state(pglist_data*, node_stat_item, long int) function int netlink_has_listeners(sock*, unsigned int) function void netlink_kernel_release(sock*) function int netlink_unicast(sock*, sk_buff*, unsigned int, int) function int nf_register_net_hooks(net*, const nf_hook_ops*, unsigned int) function void nf_unregister_net_hooks(net*, const nf_hook_ops*, unsigned int) function void release_sock(sock*) function sock* sk_alloc(net*, int, unsigned int, proto*, int) function void sk_free(sock*) function void skb_free_datagram(sock*, sk_buff*) function sk_buff* skb_recv_datagram(sock*, unsigned int, int, int*) function void skb_set_owner_w(sk_buff*, sock*) function sk_buff* sock_alloc_send_skb(sock*, unsigned long int, int, int*) function int sock_diag_register(const sock_diag_handler*) function void sock_diag_save_cookie(sock*, unsigned int*) function void sock_diag_unregister(const sock_diag_handler*) function unsigned long int sock_i_ino(sock*) function void sock_init_data(socket*, sock*) function int sock_queue_rcv_skb(sock*, sk_buff*) function dst_entry* xfrm_lookup(net*, dst_entry*, const flowi*, const sock*, int) 'struct per_cpu_pageset at mmzone.h:345:1' changed: type size changed from 640 to 768 (in bits) there are data member changes: type 'struct per_cpu_pages' of 'per_cpu_pageset::pcp' changed as reported earlier and size changed from 512 to 640 (in bits) (by +128 bits) 's8 per_cpu_pageset::stat_threshold' offset changed from 512 to 640 (in bits) (by +128 bits) 's8 per_cpu_pageset::vm_stat_diff[14]' offset changed from 520 to 648 (in bits) (by +128 bits) 38 impacted interfaces: function int __netlink_dump_start(sock*, sk_buff*, const nlmsghdr*, netlink_dump_control*) function sock* __netlink_kernel_create(net*, int, module*, netlink_kernel_cfg*) function void __sock_recv_ts_and_drops(msghdr*, sock*, sk_buff*) function sock* bt_accept_dequeue(sock*, socket*) function void bt_accept_enqueue(sock*, sock*, bool) function void bt_accept_unlink(sock*) function void bt_sock_link(bt_sock_list*, sock*) function void bt_sock_reclassify_lock(sock*, int) function void bt_sock_unlink(bt_sock_list*, sock*) function int bt_sock_wait_ready(sock*, unsigned long int) function int bt_sock_wait_state(sock*, int, unsigned long int) function void dev_add_pack(packet_type*) function void dev_remove_pack(packet_type*) function int ip6_local_out(net*, sock*, sk_buff*) function dst_entry* ip6_route_output_flags(net*, const sock*, flowi6*, int) function int ip_local_out(net*, sock*, sk_buff*) function rtable* ip_route_output_flow(net*, flowi4*, const sock*) function void lock_sock_nested(sock*, int) function void mod_node_page_state(pglist_data*, node_stat_item, long int) function int netlink_has_listeners(sock*, unsigned int) function void netlink_kernel_release(sock*) function int netlink_unicast(sock*, sk_buff*, unsigned int, int) function int nf_register_net_hooks(net*, const nf_hook_ops*, unsigned int) function void nf_unregister_net_hooks(net*, const nf_hook_ops*, unsigned int) function void release_sock(sock*) function sock* sk_alloc(net*, int, unsigned int, proto*, int) function void sk_free(sock*) function void skb_free_datagram(sock*, sk_buff*) function sk_buff* skb_recv_datagram(sock*, unsigned int, int, int*) function void skb_set_owner_w(sk_buff*, sock*) function sk_buff* sock_alloc_send_skb(sock*, unsigned long int, int, int*) function int sock_diag_register(const sock_diag_handler*) function void sock_diag_save_cookie(sock*, unsigned int*) function void sock_diag_unregister(const sock_diag_handler*) function unsigned long int sock_i_ino(sock*) function void sock_init_data(socket*, sock*) function int sock_queue_rcv_skb(sock*, sk_buff*) function dst_entry* xfrm_lookup(net*, dst_entry*, const flowi*, const sock*, int) 'struct pglist_data at mmzone.h:707:1' changed: type size hasn't changed there are data member changes: 'zone pglist_data::node_zones[3]' has *some* difference - please report as a bug 38 impacted interfaces: function int __netlink_dump_start(sock*, sk_buff*, const nlmsghdr*, netlink_dump_control*) function sock* __netlink_kernel_create(net*, int, module*, netlink_kernel_cfg*) function void __sock_recv_ts_and_drops(msghdr*, sock*, sk_buff*) function sock* bt_accept_dequeue(sock*, socket*) function void bt_accept_enqueue(sock*, sock*, bool) function void bt_accept_unlink(sock*) function void bt_sock_link(bt_sock_list*, sock*) function void bt_sock_reclassify_lock(sock*, int) function void bt_sock_unlink(bt_sock_list*, sock*) function int bt_sock_wait_ready(sock*, unsigned long int) function int bt_sock_wait_state(sock*, int, unsigned long int) function void dev_add_pack(packet_type*) function void dev_remove_pack(packet_type*) function int ip6_local_out(net*, sock*, sk_buff*) function dst_entry* ip6_route_output_flags(net*, const sock*, flowi6*, int) function int ip_local_out(net*, sock*, sk_buff*) function rtable* ip_route_output_flow(net*, flowi4*, const sock*) function void lock_sock_nested(sock*, int) function void mod_node_page_state(pglist_data*, node_stat_item, long int) function int netlink_has_listeners(sock*, unsigned int) function void netlink_kernel_release(sock*) function int netlink_unicast(sock*, sk_buff*, unsigned int, int) function int nf_register_net_hooks(net*, const nf_hook_ops*, unsigned int) function void nf_unregister_net_hooks(net*, const nf_hook_ops*, unsigned int) function void release_sock(sock*) function sock* sk_alloc(net*, int, unsigned int, proto*, int) function void sk_free(sock*) function void skb_free_datagram(sock*, sk_buff*) function sk_buff* skb_recv_datagram(sock*, unsigned int, int, int*) function void skb_set_owner_w(sk_buff*, sock*) function sk_buff* sock_alloc_send_skb(sock*, unsigned long int, int, int*) function int sock_diag_register(const sock_diag_handler*) function void sock_diag_save_cookie(sock*, unsigned int*) function void sock_diag_unregister(const sock_diag_handler*) function unsigned long int sock_i_ino(sock*) function void sock_init_data(socket*, sock*) function int sock_queue_rcv_skb(sock*, sk_buff*) function dst_entry* xfrm_lookup(net*, dst_entry*, const flowi*, const sock*, int) 'struct zone at mmzone.h:421:1' changed: type size hasn't changed 1 data member insertion: 'bool zone::cma_alloc', at offset 640 (in bits) at mmzone.h:450:1 there are data member changes: 'unsigned long int zone::zone_start_pfn' offset changed from 640 to 704 (in bits) (by +64 bits) 'atomic_long_t zone::managed_pages' offset changed from 704 to 768 (in bits) (by +64 bits) 'unsigned long int zone::spanned_pages' offset changed from 768 to 832 (in bits) (by +64 bits) 'unsigned long int zone::present_pages' offset changed from 832 to 896 (in bits) (by +64 bits) 'const char* zone::name' offset changed from 896 to 960 (in bits) (by +64 bits) 'unsigned long int zone::nr_isolate_pageblock' offset changed from 960 to 1024 (in bits) (by +64 bits) 'seqlock_t zone::span_seqlock' offset changed from 1024 to 1088 (in bits) (by +64 bits) 'int zone::initialized' offset changed from 1088 to 1152 (in bits) (by +64 bits) 38 impacted interfaces: function int __netlink_dump_start(sock*, sk_buff*, const nlmsghdr*, netlink_dump_control*) function sock* __netlink_kernel_create(net*, int, module*, netlink_kernel_cfg*) function void __sock_recv_ts_and_drops(msghdr*, sock*, sk_buff*) function sock* bt_accept_dequeue(sock*, socket*) function void bt_accept_enqueue(sock*, sock*, bool) function void bt_accept_unlink(sock*) function void bt_sock_link(bt_sock_list*, sock*) function void bt_sock_reclassify_lock(sock*, int) function void bt_sock_unlink(bt_sock_list*, sock*) function int bt_sock_wait_ready(sock*, unsigned long int) function int bt_sock_wait_state(sock*, int, unsigned long int) function void dev_add_pack(packet_type*) function void dev_remove_pack(packet_type*) function int ip6_local_out(net*, sock*, sk_buff*) function dst_entry* ip6_route_output_flags(net*, const sock*, flowi6*, int) function int ip_local_out(net*, sock*, sk_buff*) function rtable* ip_route_output_flow(net*, flowi4*, const sock*) function void lock_sock_nested(sock*, int) function void mod_node_page_state(pglist_data*, node_stat_item, long int) function int netlink_has_listeners(sock*, unsigned int) function void netlink_kernel_release(sock*) function int netlink_unicast(sock*, sk_buff*, unsigned int, int) function int nf_register_net_hooks(net*, const nf_hook_ops*, unsigned int) function void nf_unregister_net_hooks(net*, const nf_hook_ops*, unsigned int) function void release_sock(sock*) function sock* sk_alloc(net*, int, unsigned int, proto*, int) function void sk_free(sock*) function void skb_free_datagram(sock*, sk_buff*) function sk_buff* skb_recv_datagram(sock*, unsigned int, int, int*) function void skb_set_owner_w(sk_buff*, sock*) function sk_buff* sock_alloc_send_skb(sock*, unsigned long int, int, int*) function int sock_diag_register(const sock_diag_handler*) function void sock_diag_save_cookie(sock*, unsigned int*) function void sock_diag_unregister(const sock_diag_handler*) function unsigned long int sock_i_ino(sock*) function void sock_init_data(socket*, sock*) function int sock_queue_rcv_skb(sock*, sk_buff*) function dst_entry* xfrm_lookup(net*, dst_entry*, const flowi*, const sock*, int) Bug: 142290962 Signed-off-by: Todd Kjos Change-Id: I1596ba26a4a8d78a4e2962c70154c155166f5451 --- abi_gki_aarch64.xml | 29053 +++++++++++++++++++++--------------------- 1 file changed, 14555 insertions(+), 14498 deletions(-) diff --git a/abi_gki_aarch64.xml b/abi_gki_aarch64.xml index 9323df2a9055..3d2ce3713262 100644 --- a/abi_gki_aarch64.xml +++ b/abi_gki_aarch64.xml @@ -4291,17 +4291,6 @@ - - - - - - - - - - - @@ -6393,7 +6382,7 @@ - + @@ -12943,6 +12932,17 @@ + + + + + + + + + + + @@ -13140,7 +13140,7 @@ - + @@ -14085,28 +14085,32 @@ - - - - - - - - - + - - + + + + + + + + + + + + + + - + - + @@ -14124,16 +14128,16 @@ - + - + - + @@ -14145,13 +14149,13 @@ - + - + @@ -14169,7 +14173,7 @@ - + @@ -14199,10 +14203,10 @@ - + - + @@ -14213,7 +14217,7 @@ - + @@ -14248,7 +14252,7 @@ - + @@ -14259,10 +14263,10 @@ - + - + @@ -14276,15 +14280,15 @@ - + - + - + @@ -14302,18 +14306,18 @@ - + - + - + @@ -14321,10 +14325,10 @@ - + - + @@ -14368,7 +14372,7 @@ - + @@ -14481,11 +14485,11 @@ - - - - - + + + + + @@ -14510,8 +14514,8 @@ - - + + @@ -14570,7 +14574,7 @@ - + @@ -14732,7 +14736,7 @@ - + @@ -22469,13 +22473,13 @@ - + - + - + @@ -24363,23 +24367,21 @@ - - - + - + - + - + @@ -24391,7 +24393,7 @@ - + @@ -24399,8 +24401,8 @@ - - + + @@ -24434,7 +24436,7 @@ - + @@ -24451,7 +24453,8 @@ - + + @@ -24498,14 +24501,15 @@ - + - - - + + + + @@ -24535,7 +24539,7 @@ - + @@ -26266,7 +26270,7 @@ - + @@ -26503,7 +26507,7 @@ - + @@ -26594,7 +26598,7 @@ - + @@ -27541,7 +27545,7 @@ - + @@ -27569,7 +27573,7 @@ - + @@ -27638,7 +27642,7 @@ - + @@ -27690,7 +27694,7 @@ - + @@ -27706,7 +27710,7 @@ - + @@ -27935,7 +27939,7 @@ - + @@ -27944,12 +27948,12 @@ - + - + @@ -27987,7 +27991,7 @@ - + @@ -28012,7 +28016,7 @@ - + @@ -28021,7 +28025,7 @@ - + @@ -28252,11 +28256,11 @@ - + - + @@ -28413,7 +28417,7 @@ - + @@ -28457,7 +28461,7 @@ - + @@ -28503,28 +28507,28 @@ - + - + - + - + - + @@ -28960,7 +28964,7 @@ - + @@ -30748,7 +30752,7 @@ - + @@ -30778,7 +30782,7 @@ - + @@ -30787,7 +30791,7 @@ - + @@ -32217,7 +32221,7 @@ - + @@ -36792,10 +36796,10 @@ - + - + @@ -38598,7 +38602,7 @@ - + @@ -42495,18 +42499,7 @@ - - - - - - - - - - - - + @@ -42520,13 +42513,13 @@ - + - + - + @@ -42547,21 +42540,21 @@ - + - + - + - + @@ -42570,16 +42563,16 @@ - + - + - + - + @@ -42598,7 +42591,7 @@ - + @@ -42676,7 +42669,7 @@ - + @@ -42688,46 +42681,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -42742,37 +42735,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -42786,16 +42779,16 @@ - + - + - + @@ -42815,7 +42808,7 @@ - + @@ -42853,7 +42846,7 @@ - + @@ -42879,7 +42872,7 @@ - + @@ -42908,7 +42901,7 @@ - + @@ -42964,7 +42957,7 @@ - + @@ -42999,7 +42992,7 @@ - + @@ -43007,7 +43000,7 @@ - + @@ -43051,7 +43044,7 @@ - + @@ -43096,7 +43089,7 @@ - + @@ -43121,7 +43114,7 @@ - + @@ -43161,21 +43154,21 @@ - + - + - + - + - + - + @@ -43229,7 +43222,7 @@ - + @@ -43246,7 +43239,7 @@ - + @@ -43266,7 +43259,7 @@ - + @@ -43289,7 +43282,7 @@ - + @@ -43306,7 +43299,7 @@ - + @@ -43336,7 +43329,7 @@ - + @@ -43344,15 +43337,15 @@ - + - - + + - + @@ -43370,24 +43363,24 @@ - + - + - + - + - + - + - + @@ -43434,13 +43427,13 @@ - + - + - + @@ -43521,51 +43514,51 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -43588,7 +43581,7 @@ - + @@ -43642,24 +43635,24 @@ - + - + - + - + - + @@ -43671,7 +43664,7 @@ - + @@ -43692,29 +43685,29 @@ - + - + - + - + - + - + - + - + @@ -43734,7 +43727,7 @@ - + @@ -43743,7 +43736,7 @@ - + @@ -43752,32 +43745,32 @@ - + - + - + - + - + - + - + - + @@ -43785,7 +43778,7 @@ - + @@ -43803,7 +43796,7 @@ - + @@ -43811,17 +43804,17 @@ - + - + - + @@ -43832,67 +43825,67 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -43911,111 +43904,111 @@ - + - - + + - + + + + + - + - + + - - - - - - + - + - + - + - - + + - - + + + + + + - + + + - - - + - - - - - + - + - + - + + + + + + + + - - - - - - - @@ -44023,7 +44016,7 @@ - + @@ -44044,14 +44037,15 @@ - - + + - - - - + + + + + @@ -44186,7 +44180,7 @@ - + @@ -44317,14 +44311,6 @@ - - - - - - - - @@ -44434,7 +44420,7 @@ - + @@ -44467,15 +44453,16 @@ - - - + + + - - - - - + + + + + + @@ -44544,30 +44531,38 @@ - - - - - - + - + + + + + + + + + + + + + + @@ -44600,54 +44595,54 @@ - - + + - + - + - + - - - - + + + + - + - + - - + + - - + + - - - - + + + + - - + + - + @@ -44658,10 +44653,10 @@ - + - + @@ -44706,7 +44701,7 @@ - + @@ -44733,7 +44728,7 @@ - + @@ -44787,19 +44782,19 @@ - + - + - + @@ -44808,10 +44803,10 @@ - + - + @@ -44832,7 +44827,7 @@ - + @@ -44841,13 +44836,13 @@ - + - + @@ -44862,7 +44857,7 @@ - + @@ -44880,83 +44875,83 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -44965,13 +44960,13 @@ - + - + - + @@ -44980,7 +44975,7 @@ - + @@ -45006,13 +45001,13 @@ - + - + - + @@ -45038,10 +45033,10 @@ - + - + @@ -45056,7 +45051,7 @@ - + @@ -45091,9 +45086,9 @@ - + - + @@ -45150,22 +45145,22 @@ - + - + - + - + - + - + @@ -45174,16 +45169,16 @@ - + - + - + - + @@ -45192,7 +45187,7 @@ - + @@ -45207,7 +45202,7 @@ - + @@ -45219,7 +45214,7 @@ - + @@ -45248,7 +45243,7 @@ - + @@ -45301,7 +45296,7 @@ - + @@ -45528,7 +45523,7 @@ - + @@ -45548,7 +45543,7 @@ - + @@ -45559,7 +45554,7 @@ - + @@ -45576,7 +45571,7 @@ - + @@ -45602,7 +45597,7 @@ - + @@ -45616,7 +45611,7 @@ - + @@ -45633,9 +45628,9 @@ - + - + @@ -45647,27 +45642,27 @@ - + - + - + - + - + - - + + - + @@ -45678,340 +45673,340 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - + + - + - - + + - - + + - - + + - - + + - + - - + + - - + + - - - + + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - - - - - + - - + + - - + + - + + + + + + - - - + + + - - - - - - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + + + + + + + - + - + - + - + - + - + - + - + - + @@ -46020,22 +46015,22 @@ - + - + - + - + - + @@ -46043,80 +46038,80 @@ - + - + - + - - + + - + - + - + - + - - + + - - + + - + - - + + - + - + - + @@ -46152,28 +46147,28 @@ - + - - + + - + - + - + - + @@ -46187,166 +46182,166 @@ - - + - - - - + + + + + - + - + - + - + - + - + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - - + + - + - + - + - + - + - + @@ -46359,7 +46354,7 @@ - + @@ -46370,7 +46365,7 @@ - + @@ -46381,7 +46376,7 @@ - + @@ -46389,13 +46384,13 @@ - + - + @@ -46403,15 +46398,7 @@ - - - - - - - - - + @@ -46569,7 +46556,7 @@ - + @@ -46577,9 +46564,9 @@ - + - + @@ -46588,17 +46575,17 @@ - - + + - + - + @@ -46606,11 +46593,11 @@ - + - + @@ -46636,13 +46623,13 @@ - + - + - + @@ -46696,16 +46683,16 @@ - + - + - + - + @@ -46825,252 +46812,252 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - + + - + - + - + - + - + - + - + - - - - - - + - + + + + + + - - - - - - - + + - + + + + + + - - + + - - - - - - + - - + + - + + + + + + - - - - - - + - - - + + + - + + + + + + - - + + - - + + - - + + @@ -47079,7 +47066,7 @@ - + @@ -47093,7 +47080,7 @@ - + @@ -47104,24 +47091,24 @@ - + - + - + - + - + @@ -47129,31 +47116,31 @@ - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + @@ -47166,7 +47153,7 @@ - + @@ -47200,12 +47187,12 @@ - + - + @@ -47213,7 +47200,7 @@ - + @@ -47221,66 +47208,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -47333,7 +47320,7 @@ - + @@ -47347,31 +47334,31 @@ - + - - + + - + - + - + - - + + @@ -47379,46 +47366,46 @@ - + - + - + - + - - + + - - + + - + - + - + - + @@ -47460,13 +47447,13 @@ - + - + @@ -47508,7 +47495,7 @@ - + @@ -47520,7 +47507,7 @@ - + @@ -47538,24 +47525,24 @@ - + - + - + - + - + @@ -47576,7 +47563,7 @@ - + @@ -47584,19 +47571,19 @@ - + - + - + - + @@ -47605,13 +47592,13 @@ - + - + @@ -47620,7 +47607,7 @@ - + @@ -47629,16 +47616,16 @@ - + - + - + @@ -47650,7 +47637,7 @@ - + @@ -47659,106 +47646,106 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -47767,7 +47754,7 @@ - + @@ -47775,7 +47762,7 @@ - + @@ -47784,20 +47771,20 @@ - + - + - + - + @@ -47806,8 +47793,8 @@ - - + + @@ -47835,51 +47822,51 @@ - - - - + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - + - + - + @@ -47896,121 +47883,121 @@ - - - - - - - + - + + + + + + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - - - - - + - - + - - + + + + + + + + - - + + - - - - - + - + + + + + - - + + - - + + - - + + - - + + @@ -48020,15 +48007,15 @@ - - + + - + - + @@ -48042,58 +48029,58 @@ - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + - + - + - + - - + + - + - + - + @@ -48105,110 +48092,110 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -48241,7 +48228,7 @@ - + @@ -48250,16 +48237,16 @@ - + - + - + - + @@ -48271,12 +48258,12 @@ - + - + - + @@ -48286,10 +48273,10 @@ - + - + @@ -48298,16 +48285,16 @@ - + - + - + @@ -48322,19 +48309,19 @@ - + - + - + - + - + @@ -48355,7 +48342,7 @@ - + @@ -48445,7 +48432,7 @@ - + @@ -48502,7 +48489,7 @@ - + @@ -48511,34 +48498,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -48568,32 +48555,32 @@ - + - + - + - + - + - + - + @@ -48604,32 +48591,32 @@ - + - + - + - + - + - + @@ -48642,7 +48629,7 @@ - + @@ -48655,13 +48642,13 @@ - + - + @@ -48679,22 +48666,22 @@ - + - + - + - + @@ -48706,11 +48693,11 @@ - + - - + + @@ -48718,8 +48705,8 @@ - - + + @@ -48727,7 +48714,7 @@ - + @@ -48735,32 +48722,32 @@ - + - + - + - + - + - + - + - + - + - + @@ -48778,7 +48765,7 @@ - + @@ -48814,10 +48801,10 @@ - + - + @@ -48829,10 +48816,10 @@ - + - + @@ -48846,31 +48833,31 @@ - + - + - + - + - + - + - + @@ -48897,7 +48884,7 @@ - + @@ -48915,18 +48902,18 @@ - + - + - + - + - + @@ -48941,10 +48928,10 @@ - + - + @@ -48952,10 +48939,10 @@ - + - + @@ -48963,7 +48950,7 @@ - + @@ -48974,10 +48961,10 @@ - + - + @@ -48995,13 +48982,13 @@ - + - + @@ -49039,9 +49026,9 @@ - + - + @@ -49053,24 +49040,24 @@ - + - + - + - + - + - + @@ -49099,10 +49086,10 @@ - + - + @@ -49110,10 +49097,10 @@ - + - + @@ -49152,7 +49139,7 @@ - + @@ -49176,16 +49163,16 @@ - + - + - + - + @@ -49203,21 +49190,21 @@ - + - + - + - + - + - + @@ -49250,12 +49237,12 @@ - + - + - + @@ -49270,15 +49257,15 @@ - + - + - + - + @@ -49299,18 +49286,18 @@ - + - + - + - + - + @@ -49322,19 +49309,19 @@ - + - + - + - + @@ -49367,24 +49354,24 @@ - + - + - + - + - + - + - + @@ -49396,13 +49383,13 @@ - + - + @@ -49410,15 +49397,15 @@ - + - + - + @@ -49453,23 +49440,23 @@ - + - + - + - + - + - + @@ -49478,21 +49465,21 @@ - + - + - + - + - + - + @@ -49512,10 +49499,10 @@ - + - + @@ -49524,16 +49511,16 @@ - + - + - + - + @@ -49547,10 +49534,10 @@ - + - + @@ -49559,9 +49546,9 @@ - + - + @@ -49585,7 +49572,7 @@ - + @@ -49597,15 +49584,15 @@ - + - + - + @@ -49614,13 +49601,13 @@ - + - + - + @@ -49644,7 +49631,7 @@ - + @@ -49659,14 +49646,22 @@ - + + + + + + + + + - + - + - + @@ -49687,10 +49682,10 @@ - + - + @@ -49699,15 +49694,15 @@ - + - + - + @@ -49716,7 +49711,7 @@ - + @@ -49760,7 +49755,7 @@ - + @@ -49772,47 +49767,47 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -49821,13 +49816,13 @@ - + - + @@ -49835,7 +49830,7 @@ - + @@ -49846,12 +49841,12 @@ - + - + - + @@ -49863,42 +49858,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -49933,10 +49928,10 @@ - + - + @@ -49948,19 +49943,19 @@ - + - + - + - + - + @@ -49989,7 +49984,7 @@ - + @@ -50016,7 +50011,7 @@ - + @@ -50051,7 +50046,7 @@ - + @@ -50063,13 +50058,13 @@ - + - + - + @@ -50078,7 +50073,7 @@ - + @@ -50087,16 +50082,16 @@ - + - + - + @@ -50111,26 +50106,26 @@ - + - + - + - + - + - + - + @@ -50151,7 +50146,7 @@ - + @@ -50159,7 +50154,7 @@ - + @@ -50173,7 +50168,7 @@ - + @@ -50184,15 +50179,15 @@ - + - + - + @@ -50206,29 +50201,29 @@ - + - + - + - + - + - + - + @@ -50240,10 +50235,10 @@ - + - + @@ -50261,30 +50256,30 @@ - + - + - + - + - + - + - + - + @@ -50292,7 +50287,7 @@ - + @@ -50309,7 +50304,7 @@ - + @@ -50317,55 +50312,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50374,19 +50369,19 @@ - - + + - + - + @@ -50404,7 +50399,7 @@ - + @@ -50413,7 +50408,7 @@ - + @@ -50430,13 +50425,13 @@ - + - + @@ -50454,24 +50449,24 @@ - + - + - + - + - + @@ -50480,10 +50475,10 @@ - + - + @@ -50498,13 +50493,13 @@ - + - + - + @@ -50513,28 +50508,28 @@ - + - + - + - + - + - + @@ -50549,12 +50544,12 @@ - + - + - + @@ -50566,99 +50561,99 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50681,7 +50676,7 @@ - + @@ -50707,10 +50702,10 @@ - + - + @@ -50736,7 +50731,7 @@ - + @@ -50744,7 +50739,7 @@ - + @@ -50753,7 +50748,7 @@ - + @@ -50779,15 +50774,15 @@ - + - + - + @@ -50795,7 +50790,7 @@ - + @@ -50809,42 +50804,42 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -50867,37 +50862,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -50912,7 +50907,7 @@ - + @@ -50950,10 +50945,10 @@ - + - + @@ -50977,20 +50972,20 @@ - + - + - + - - + + @@ -50998,7 +50993,7 @@ - + @@ -51006,26 +51001,26 @@ - + - + - + - + - + - + - + - + @@ -51054,20 +51049,20 @@ - + - + - + - + - + @@ -51076,18 +51071,18 @@ - + - + - + - + - + @@ -51096,10 +51091,10 @@ - + - + @@ -51107,7 +51102,7 @@ - + @@ -51115,7 +51110,7 @@ - + @@ -51124,34 +51119,34 @@ - + - + - + - + - + - + - + - + @@ -51160,10 +51155,10 @@ - + - + @@ -51174,7 +51169,7 @@ - + @@ -51183,7 +51178,7 @@ - + @@ -51212,16 +51207,16 @@ - - + + - + - + @@ -51229,8 +51224,8 @@ - - + + @@ -51241,7 +51236,7 @@ - + @@ -51255,7 +51250,7 @@ - + @@ -51263,10 +51258,10 @@ - + - + @@ -51280,9 +51275,9 @@ - + - + @@ -51294,17 +51289,17 @@ - + - + - + - - + + @@ -51312,7 +51307,7 @@ - + @@ -51320,88 +51315,88 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -51424,8 +51419,8 @@ - - + + @@ -51433,13 +51428,13 @@ - + - + @@ -51447,21 +51442,21 @@ - - + + - + - + - + - + @@ -51475,8 +51470,8 @@ - - + + @@ -51490,27 +51485,27 @@ - + - + - + - + - + - + - + - + @@ -51531,10 +51526,10 @@ - + - + @@ -51546,7 +51541,7 @@ - + @@ -51557,13 +51552,13 @@ - + - + - + @@ -51571,12 +51566,12 @@ - + - + @@ -51602,7 +51597,7 @@ - + @@ -51611,241 +51606,241 @@ - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - + - + - - - - - - - + + + + + + + + - - - - - + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - + + + + + - + @@ -51853,15 +51848,15 @@ - + - + - + @@ -51869,37 +51864,37 @@ - + - + - - + + - + - + - + - + - + @@ -51909,7 +51904,7 @@ - + @@ -51923,53 +51918,53 @@ - + - + - - - + + + - + - + - - + + - - - - - - + - + + + + + + - - + + - - + + @@ -51977,129 +51972,129 @@ - - + + - - - - - - + - - - - + - + + + - + - - + - - - + + + + - - - + + + - + + + + + + + - + - + - - - + + + - + - - - - - - - + - - - + + + - - + + - - - + + + - + - + + + + + + + - + - + - - - - - - + + + + + + - + - + @@ -52109,406 +52104,406 @@ - + - + - + - - - - - - - - + + + + - - - - + + + + + + + + - - - - - - + - + + + + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - - - - - - + + + - - - + + - - - + + + - + + + + + + + - - + + - - - - - - + - + + + + + + - - + + - - - - - - - - + + - - - + + + - - - + + - - + + + + - - + + + + + + + - - + + - - + + - - + + - - + + - + - - + + - + - - - + + + - - + + - - + + - + - - + + - + - + - + - + - - + + - + - - - - - - + - - + + - + + - - + + - + + + + + - - + + - - + + - + - + - + - - - - - - - + - - + + + + - - + - - + + - - + + - - - - - + + - + + + + + + + + + - - - - - - + - + - - + + + - - + + + + + + - - - + + + @@ -52518,46 +52513,46 @@ - - - - - + - + - - + - - + + - - - + + - + + + + + + + - - + + - + @@ -52565,57 +52560,49 @@ - + - + - - + + - + - + - + - + - + - + - + - + + + + + + + - - - - - - - - - - - - - - - + @@ -52623,23 +52610,23 @@ - + - + - + - + - + - + - + @@ -52649,7 +52636,7 @@ - + @@ -52657,10 +52644,10 @@ - + - + @@ -52674,8 +52661,8 @@ - - + + @@ -52693,23 +52680,23 @@ - + - + - - + + - + @@ -52723,7 +52710,7 @@ - + @@ -52736,80 +52723,80 @@ - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -52836,24 +52823,24 @@ - + - + - + - + - + @@ -52901,9 +52888,9 @@ - + - + @@ -52912,13 +52899,13 @@ - + - + @@ -52947,15 +52934,15 @@ - + - + - + - + @@ -52964,7 +52951,7 @@ - + @@ -52979,7 +52966,7 @@ - + @@ -53005,7 +52992,7 @@ - + @@ -53022,7 +53009,7 @@ - + @@ -53036,7 +53023,7 @@ - + @@ -53062,14 +53049,14 @@ - + - + @@ -53110,7 +53097,7 @@ - + @@ -53118,7 +53105,7 @@ - + @@ -53126,7 +53113,7 @@ - + @@ -53137,10 +53124,10 @@ - + - + @@ -53149,43 +53136,43 @@ - + - + - + - + - + - + - + - + - + - + @@ -53281,22 +53268,22 @@ - + - + - + - + - + @@ -53317,7 +53304,7 @@ - + @@ -53329,7 +53316,7 @@ - + @@ -53339,7 +53326,7 @@ - + @@ -53380,13 +53367,13 @@ - + - + @@ -53413,12 +53400,12 @@ - + - + @@ -53462,24 +53449,24 @@ - + - + - + - + - + - + - + @@ -53494,7 +53481,7 @@ - + @@ -53508,7 +53495,7 @@ - + @@ -53522,7 +53509,7 @@ - + @@ -53548,7 +53535,7 @@ - + @@ -53571,10 +53558,10 @@ - + - + @@ -53591,7 +53578,7 @@ - + @@ -53602,21 +53589,21 @@ - + - + - + - + - + @@ -53625,7 +53612,7 @@ - + @@ -53651,7 +53638,7 @@ - + @@ -53659,16 +53646,16 @@ - + - + - + @@ -53676,7 +53663,7 @@ - + @@ -53690,9 +53677,9 @@ - + - + @@ -53701,13 +53688,13 @@ - + - + @@ -53721,13 +53708,13 @@ - + - + @@ -53751,7 +53738,7 @@ - + @@ -53759,7 +53746,7 @@ - + @@ -53788,7 +53775,7 @@ - + @@ -53845,10 +53832,10 @@ - + - + @@ -53863,7 +53850,7 @@ - + @@ -53880,8 +53867,8 @@ - - + + @@ -53895,7 +53882,7 @@ - + @@ -53924,10 +53911,10 @@ - + - + @@ -53936,50 +53923,50 @@ - - - - + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - + + + - + + + + + + + + - - - - - - + + + + + + + + - + - + @@ -53995,15 +53982,15 @@ - + - - + + @@ -54024,7 +54011,7 @@ - + @@ -54054,7 +54041,7 @@ - + @@ -54062,11 +54049,11 @@ - + - + @@ -54085,7 +54072,7 @@ - + @@ -54106,11 +54093,11 @@ - + - + @@ -54121,8 +54108,8 @@ - - + + @@ -54154,7 +54141,7 @@ - + @@ -54163,11 +54150,11 @@ - + - + @@ -54179,14 +54166,14 @@ - + - + - + @@ -54221,69 +54208,69 @@ - + - - + + - - - - - - + - - + + - + + + + + + - + - + - + - - + + - - + + - + - + - + @@ -54322,7 +54309,7 @@ - + @@ -54340,7 +54327,7 @@ - + @@ -54352,19 +54339,19 @@ - + - + - + - + - + @@ -54376,10 +54363,10 @@ - + - + @@ -54403,7 +54390,7 @@ - + @@ -54411,46 +54398,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -54468,20 +54455,20 @@ - - - + + - - - - - - - - + + + + + + + + + - + @@ -54489,7 +54476,7 @@ - + @@ -54499,7 +54486,7 @@ - + @@ -54516,22 +54503,22 @@ - - + + - - + + - + - + @@ -54594,20 +54581,20 @@ - + - + - + - + @@ -54617,7 +54604,7 @@ - + @@ -54627,7 +54614,7 @@ - + @@ -54637,7 +54624,7 @@ - + @@ -54647,7 +54634,7 @@ - + @@ -54656,57 +54643,57 @@ - - - - - - + - - + + - - + + - + + + + + + - - - - - - + - - + + - + + + + + + - - - - + + + + @@ -54726,22 +54713,22 @@ - + - + - + - - + + - + @@ -54750,7 +54737,7 @@ - + @@ -54771,12 +54758,12 @@ - + - + - + @@ -54788,7 +54775,7 @@ - + @@ -54799,59 +54786,59 @@ - + - - + + - - + - - - - - - + + + + + + + - - + + + - - + - + - - + + - - + + - - - + + + - - - + + + @@ -54860,8 +54847,8 @@ - - + + @@ -54890,7 +54877,7 @@ - + @@ -54901,13 +54888,13 @@ - + - - - - + + + + @@ -54972,7 +54959,7 @@ - + @@ -54992,44 +54979,44 @@ - + - + - + - + - + - + - + - + - + @@ -55068,11 +55055,11 @@ - + - + @@ -55095,7 +55082,7 @@ - + @@ -55109,12 +55096,12 @@ - - + + - + @@ -55156,7 +55143,7 @@ - + @@ -55170,21 +55157,21 @@ - + - + - + - + - + @@ -55196,20 +55183,20 @@ - + - + - - - - - - + + + + + + @@ -55231,16 +55218,16 @@ - + - + - + @@ -55253,8 +55240,8 @@ - - + + @@ -55281,28 +55268,28 @@ - - + + - + - + - + - + @@ -55314,23 +55301,23 @@ - + - + - - - - + + + + @@ -55341,13 +55328,13 @@ - + - - + + @@ -55356,13 +55343,13 @@ - - + + - + @@ -55398,19 +55385,19 @@ - + - - - + + + - + - + @@ -55423,12 +55410,12 @@ - + - + - + @@ -55436,7 +55423,7 @@ - + @@ -55448,48 +55435,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -55510,7 +55497,7 @@ - + @@ -55587,15 +55574,15 @@ - + - + - + @@ -55651,7 +55638,7 @@ - + @@ -55675,7 +55662,7 @@ - + @@ -55687,33 +55674,33 @@ - + - + - + - + - + - + - + - + - + - + @@ -55733,24 +55720,24 @@ - + - + - + - + - + - + @@ -55762,10 +55749,10 @@ - + - + @@ -55792,7 +55779,7 @@ - + @@ -55800,66 +55787,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -55888,10 +55875,10 @@ - + - + @@ -55899,7 +55886,7 @@ - + @@ -55907,13 +55894,13 @@ - + - + @@ -55922,14 +55909,14 @@ - + - + @@ -55946,13 +55933,13 @@ - + - + @@ -55969,55 +55956,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -56025,67 +56012,67 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -56108,27 +56095,27 @@ - + - + - + - + - + - + @@ -56146,20 +56133,20 @@ - + - + - + @@ -56167,7 +56154,7 @@ - + @@ -56199,202 +56186,202 @@ - + - + - + - + - - - - - - - + + - - - + + + + - - - - - - - - + - - - - - - + - - + + + + + + - + + + + + + + - + - + + + + + + + - - + + - - - - - - - + + + - - - - + - - - - - - - - - - + + + + + + + + - + - + + + + + + - - - + - - - + + - + + + - - + + + + + + + - - + + - - + + - - + + - - - - - + - - - + - + + + + + + + - - - - + + + + @@ -56433,7 +56420,7 @@ - + @@ -56445,11 +56432,11 @@ - + - + @@ -56498,19 +56485,19 @@ - + - + - + - + @@ -56521,11 +56508,11 @@ - + - - + + @@ -56573,16 +56560,16 @@ - + - + - + @@ -56643,11 +56630,11 @@ - + - + @@ -56674,7 +56661,7 @@ - + @@ -56687,43 +56674,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -56746,13 +56733,13 @@ - + - + - + @@ -56785,24 +56772,24 @@ - + - - - - - - - - - - - - + + + + + + + + + + + + @@ -56818,7 +56805,7 @@ - + @@ -56850,7 +56837,7 @@ - + @@ -56866,37 +56853,37 @@ - - - - - - - + + + - - + - + + + + + + - + @@ -56904,13 +56891,13 @@ - + - - + + @@ -56940,7 +56927,7 @@ - + @@ -56954,11 +56941,11 @@ - + - - + + @@ -56976,65 +56963,65 @@ - + - + - + - + - + - - + + - + - + - + - - + + - - + + - + - + @@ -57043,30 +57030,30 @@ - + - + - + - + - - + + - + - + @@ -57074,10 +57061,10 @@ - + - + @@ -57088,33 +57075,33 @@ - + - - - + + + - + - + - + - + - + - + @@ -57125,7 +57112,7 @@ - + @@ -57134,7 +57121,7 @@ - + @@ -57145,12 +57132,12 @@ - + - + @@ -57180,36 +57167,36 @@ - + - + - + - + - + - + - + - + @@ -57218,16 +57205,16 @@ - + - + - + @@ -57238,27 +57225,27 @@ - + - + - + - + - + - + - + - + @@ -57266,16 +57253,16 @@ - + - + - + @@ -57283,15 +57270,15 @@ - + - + - + - + @@ -57299,7 +57286,7 @@ - + @@ -57310,44 +57297,44 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -57375,26 +57362,26 @@ - + - + - + - + - + - + @@ -57403,43 +57390,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -57454,7 +57441,7 @@ - + @@ -57466,10 +57453,10 @@ - + - + @@ -57486,13 +57473,13 @@ - + - + - + @@ -57528,10 +57515,10 @@ - + - + @@ -57546,60 +57533,60 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -57613,9 +57600,9 @@ - + - + @@ -57637,15 +57624,15 @@ - + - + - + - + @@ -57677,160 +57664,160 @@ - + - - + + - + - + - + - - - - - - - - - + - + + + - + - + - + + + - - - - + - - - + + + - + - + + - + + + + + + + - + - + - + - + - - - - - - - - - - - - + + + + + + - - + + - + + + + + + + - + - - + + @@ -57853,18 +57840,18 @@ - + - - - - - - - - - + + + + + + + + + @@ -57914,7 +57901,7 @@ - + @@ -57922,56 +57909,56 @@ - - - + + + - - - + + + - - + + - - + + - + - - + + - - - + + + - - + + - - + + @@ -57979,39 +57966,39 @@ - - + + - + - - + + - + - + - + - + @@ -58032,13 +58019,13 @@ - + - + @@ -58049,7 +58036,7 @@ - + @@ -58129,7 +58116,7 @@ - + @@ -58138,17 +58125,17 @@ - - - - - - - - + + + + + + + + - + @@ -58173,15 +58160,15 @@ - + - + - + @@ -58210,22 +58197,22 @@ - + - + - + - + - + @@ -58233,7 +58220,7 @@ - + @@ -58241,16 +58228,16 @@ - - - + + + - + - + @@ -58268,26 +58255,26 @@ - + - + - + - + - + @@ -58303,7 +58290,7 @@ - + @@ -58311,7 +58298,7 @@ - + @@ -58320,12 +58307,12 @@ - + - + @@ -58334,7 +58321,7 @@ - + @@ -58343,45 +58330,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -58395,32 +58382,32 @@ - + - + - + - + - + - + - + @@ -58428,21 +58415,21 @@ - + - + - + - + @@ -58450,111 +58437,111 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - + - + - + - - + + - + - + - + - + - - - - - - - - + + - - - + + + - - - - + + + - - - + + + + + + + + + + - - + + - - - - - - + - - - + + + + + + + + @@ -58567,11 +58554,11 @@ - - + + - + @@ -58597,7 +58584,7 @@ - + @@ -58606,13 +58593,13 @@ - + - + @@ -58620,11 +58607,11 @@ - - - + + + - + @@ -58633,116 +58620,116 @@ - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - - - + + + @@ -58750,19 +58737,19 @@ - + - + - + - + @@ -58789,11 +58776,11 @@ - - - + + + - + @@ -58814,7 +58801,7 @@ - + @@ -58835,10 +58822,10 @@ - + - + @@ -58856,7 +58843,7 @@ - + @@ -58868,7 +58855,7 @@ - + @@ -58882,7 +58869,7 @@ - + @@ -58897,13 +58884,13 @@ - + - + @@ -58927,7 +58914,7 @@ - + @@ -59035,12 +59022,12 @@ - + - + @@ -59055,18 +59042,18 @@ - + - + - + @@ -59075,7 +59062,7 @@ - + @@ -59116,16 +59103,16 @@ - + - + - + - + @@ -59170,7 +59157,7 @@ - + @@ -59190,8 +59177,8 @@ - - + + @@ -59199,113 +59186,113 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -59319,12 +59306,12 @@ - + - + - + @@ -59338,7 +59325,7 @@ - + @@ -59358,38 +59345,38 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + @@ -59398,130 +59385,130 @@ - - + + - - + + - + - - - - - - - + + + - - + - - + + - - + - + - - - - - - - - - - - - + + + + + + + + + + + + + - + + + + + + - - - - - - - - + + + + + + + + - + - + - + - + - + - + - + - + - + @@ -59563,28 +59550,28 @@ - + - + - + - + - + - + @@ -59595,30 +59582,30 @@ - + - + - + - + - + - + - + - + @@ -59636,7 +59623,7 @@ - + @@ -59659,59 +59646,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -59719,26 +59706,26 @@ - + - + - + - + - + - + - + @@ -59749,38 +59736,38 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -59800,34 +59787,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -59848,220 +59835,220 @@ - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + - - - - - + + - + - + - + - - + + - - + + - - - - - - + - - + + + - - + - - + + - + - - + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - + + + + + + + + - - - - - - - + + + - - + + + + + + - + @@ -60102,7 +60089,7 @@ - + @@ -60129,26 +60116,26 @@ - + - + - + - + - - + + @@ -60162,13 +60149,13 @@ - + - + @@ -60180,10 +60167,10 @@ - + - + @@ -60204,7 +60191,7 @@ - + @@ -60221,41 +60208,41 @@ - + - - - - - - - - + + + + + + + + - - + + - + - + - + @@ -60264,7 +60251,7 @@ - + @@ -60275,7 +60262,7 @@ - + @@ -60308,10 +60295,10 @@ - + - + @@ -60341,7 +60328,7 @@ - + @@ -60353,36 +60340,36 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -60411,7 +60398,7 @@ - + @@ -60419,10 +60406,10 @@ - + - + @@ -60430,29 +60417,29 @@ - + - + - - - - - - + + + + + - - - - - + + + + + + @@ -60460,7 +60447,7 @@ - + @@ -60468,30 +60455,25 @@ - + - + - + - + - - - - - - + @@ -60501,22 +60483,27 @@ - + - + + + + + + - - + + @@ -60529,7 +60516,7 @@ - + @@ -60546,19 +60533,19 @@ - - + + - + - + - + - + @@ -60579,18 +60566,18 @@ - + - + - + - + @@ -60604,64 +60591,64 @@ - + - + - - - - - + + + + + - + - + - + - + - + - - - - + + + + - - + + - - - - + + + + - + - + @@ -60754,19 +60741,19 @@ - + - + - + - + @@ -60946,13 +60933,13 @@ - + - + @@ -60964,7 +60951,7 @@ - + @@ -60973,7 +60960,7 @@ - + @@ -61005,10 +60992,10 @@ - + - + @@ -61146,7 +61133,7 @@ - + @@ -61164,7 +61151,7 @@ - + @@ -61172,7 +61159,7 @@ - + @@ -61180,79 +61167,79 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -61318,10 +61305,10 @@ - + - + @@ -61333,18 +61320,18 @@ - + - + - + - + @@ -61389,10 +61376,10 @@ - + - + @@ -61407,10 +61394,10 @@ - + - + @@ -61428,9 +61415,9 @@ - + - + @@ -61454,7 +61441,7 @@ - + @@ -61462,7 +61449,7 @@ - + @@ -61479,24 +61466,24 @@ - + - + - + - + - + - + - + @@ -61547,7 +61534,7 @@ - + @@ -61556,7 +61543,7 @@ - + @@ -61564,7 +61551,7 @@ - + @@ -61574,7 +61561,7 @@ - + @@ -61585,13 +61572,13 @@ - - + + - + @@ -61603,141 +61590,141 @@ - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - - + + - - + + - - + + - - + + - - - - - - - + + - + + - + - + + + + + - - + + - - + + - - - - - - + - - - + + + + - - + - + + - + - + + + + + - + @@ -61763,7 +61750,18 @@ - + + + + + + + + + + + + @@ -61774,29 +61772,29 @@ - + - + - + - + - + - + - + - - + + @@ -61822,27 +61820,27 @@ - + - + - - - - - - - - + + + + + + + + - + @@ -61852,89 +61850,169 @@ - - + + - - + + - + - + - - + + - - - + + + - - - + + + - - + + - + - - + + - + - + - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -61943,30 +62021,30 @@ - + - - + + - + - + - + - + @@ -62004,7 +62082,7 @@ - + @@ -62030,45 +62108,45 @@ - - - + + + - + - + - + - - + + - - + + - - + + - + - + @@ -62082,7 +62160,7 @@ - + @@ -62097,7 +62175,7 @@ - + @@ -62139,10 +62217,10 @@ - + - + @@ -62150,13 +62228,13 @@ - + - + - + @@ -62168,7 +62246,7 @@ - + @@ -62182,18 +62260,18 @@ - + - + - + - + @@ -62205,25 +62283,25 @@ - + - + - + - + - + - + @@ -62238,7 +62316,7 @@ - + @@ -62262,13 +62340,13 @@ - + - + @@ -62280,7 +62358,7 @@ - + @@ -62301,7 +62379,7 @@ - + @@ -62343,25 +62421,25 @@ - + - + - + - + @@ -62376,13 +62454,13 @@ - + - + - + @@ -62391,13 +62469,13 @@ - + - + @@ -62406,7 +62484,7 @@ - + @@ -62418,32 +62496,32 @@ - + - + - + - + - + - + - + - + - + @@ -62464,7 +62542,7 @@ - + @@ -62478,12 +62556,12 @@ - + - + - + @@ -62498,7 +62576,7 @@ - + @@ -62507,10 +62585,10 @@ - + - + @@ -62521,19 +62599,19 @@ - + - + - + @@ -62543,18 +62621,18 @@ - + - + - + - + - + @@ -62569,7 +62647,7 @@ - + @@ -62611,29 +62689,29 @@ - + - + - + - + - + - + - + - + - + @@ -62641,7 +62719,7 @@ - + @@ -62667,23 +62745,23 @@ - + - + - + - + - + - + - + @@ -62694,10 +62772,10 @@ - + - + @@ -62711,77 +62789,85 @@ - + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -62804,7 +62890,7 @@ - + @@ -62820,23 +62906,23 @@ - + - + - + - + - + - + @@ -62860,59 +62946,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -62920,7 +63006,7 @@ - + @@ -62943,7 +63029,7 @@ - + @@ -62951,59 +63037,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -63015,42 +63101,42 @@ - + - + - + - + - + - + - + - + - + - + @@ -63070,23 +63156,23 @@ - + - + - + - + - + - + - + @@ -63104,15 +63190,15 @@ - + - + - + @@ -63120,7 +63206,7 @@ - + @@ -63144,14 +63230,14 @@ - + - + @@ -63168,7 +63254,7 @@ - + @@ -63189,15 +63275,15 @@ - + - + - + @@ -63205,7 +63291,7 @@ - + @@ -63228,15 +63314,15 @@ - + - + - + @@ -63250,15 +63336,15 @@ - + - + - + @@ -63272,7 +63358,7 @@ - + @@ -63284,7 +63370,7 @@ - + @@ -63298,7 +63384,7 @@ - + @@ -63325,7 +63411,7 @@ - + @@ -63339,53 +63425,53 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -63406,7 +63492,7 @@ - + @@ -63414,52 +63500,52 @@ - + - + - + - + - + - - - + + + - - - + + + - - - + + + @@ -63467,141 +63553,141 @@ - + - + - + - + - + - + - + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + + + + + + + + - - + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - + + - - + + - - + + - + @@ -63612,7 +63698,7 @@ - + @@ -63624,33 +63710,33 @@ - + - + - + - - - - - + + + + + - + - - + + - - + + @@ -63664,8 +63750,8 @@ - - + + @@ -63675,10 +63761,10 @@ - - - - + + + + @@ -63688,12 +63774,12 @@ - + - + @@ -63708,7 +63794,7 @@ - + @@ -63726,7 +63812,7 @@ - + @@ -63741,25 +63827,25 @@ - + - + - + - + - + - + - + @@ -63774,19 +63860,19 @@ - + - + - + - + @@ -63801,26 +63887,26 @@ - + - + - + - + - + - + - + @@ -63828,7 +63914,7 @@ - + @@ -63856,25 +63942,25 @@ - + - + - + - - + + - + @@ -63885,37 +63971,37 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - + @@ -63926,7 +64012,7 @@ - + @@ -63936,15 +64022,15 @@ - - + + - - + + @@ -63952,49 +64038,49 @@ - + - + - + - + - - + + - + - + - + - - + + - + @@ -64004,7 +64090,7 @@ - + @@ -64021,20 +64107,20 @@ - + - + - + - - - - + + + + - + @@ -64043,19 +64129,19 @@ - + - + - + - + - + @@ -64063,7 +64149,7 @@ - + @@ -64074,21 +64160,21 @@ - + - + - + - + - + - + @@ -64096,7 +64182,7 @@ - + @@ -64107,7 +64193,7 @@ - + @@ -64115,27 +64201,27 @@ - + - + - + - + - + @@ -64143,12 +64229,12 @@ - + - + - + @@ -64157,9 +64243,9 @@ - + - + @@ -64168,9 +64254,9 @@ - + - + @@ -64185,7 +64271,7 @@ - + @@ -64193,21 +64279,21 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + @@ -64218,7 +64304,7 @@ - + @@ -64269,54 +64355,54 @@ - - + + - - - - - - - - - - - + + - - - + + + + + + + + + + + + - - + + - - + + - + - + - + @@ -64324,74 +64410,74 @@ - + - + - + - + - + - + - - - - - - - - + + + + + + + + - + - + - + - + - + - + - + @@ -64400,29 +64486,29 @@ - + - + - + - + - - + + - - + + @@ -64430,8 +64516,8 @@ - - + + @@ -64439,12 +64525,12 @@ - - + + - - + + @@ -64473,19 +64559,19 @@ - - + + - + - + - + @@ -64533,30 +64619,30 @@ - + - + - + - + - + - + - + @@ -64586,57 +64672,57 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -64674,19 +64760,19 @@ - + - + - + - + @@ -64702,10 +64788,10 @@ - + - + @@ -64714,7 +64800,7 @@ - + @@ -64732,36 +64818,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -64772,7 +64858,7 @@ - + @@ -64795,42 +64881,42 @@ - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -64839,127 +64925,127 @@ - - + + - - + + - + - + - + - + - + - + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -64973,17 +65059,17 @@ - + - + - + @@ -64991,21 +65077,21 @@ - - - + + + - - - + + + - - - + + + @@ -65022,24 +65108,24 @@ - + - + - + - + - - - - + + + + @@ -65059,31 +65145,31 @@ - - + + - + - + - + - + - + @@ -65091,7 +65177,7 @@ - + @@ -65105,13 +65191,13 @@ - + - + - + @@ -65153,13 +65239,13 @@ - + - + - + @@ -65180,10 +65266,10 @@ - + - + @@ -65191,54 +65277,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -65258,7 +65344,7 @@ - + @@ -65273,39 +65359,39 @@ - + - + - + - + - + - + - + - + - + - + @@ -65313,7 +65399,7 @@ - + @@ -65324,7 +65410,7 @@ - + @@ -65351,9 +65437,9 @@ - + - + @@ -65365,21 +65451,21 @@ - + - + - + - + - + @@ -65390,7 +65476,7 @@ - + @@ -65401,24 +65487,24 @@ - + - + - + - + - + - + - + @@ -65429,59 +65515,59 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + @@ -65491,123 +65577,123 @@ - - + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + + + - - - + + - - - + + - - - + - - + + - - - - - - + - - + + + + + + + + - + - + - + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -65618,7 +65704,7 @@ - + @@ -65626,27 +65712,27 @@ - - + + - + - + - + - + @@ -65660,44 +65746,44 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -65721,7 +65807,7 @@ - + @@ -65730,7 +65816,7 @@ - + @@ -65742,97 +65828,97 @@ - - - - - - - - - - + + + + + + + + + + - + - + - - + + - + - + - + - - + + - - + + - - + + - + - + - + - - + + - - + + - + - - - - + + + + @@ -65846,46 +65932,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -65894,7 +65980,7 @@ - + @@ -65905,19 +65991,19 @@ - + - + - + - + @@ -65941,13 +66027,13 @@ - + - + - + @@ -65965,7 +66051,7 @@ - + @@ -65995,7 +66081,7 @@ - + @@ -66034,10 +66120,10 @@ - + - + @@ -66045,7 +66131,7 @@ - + @@ -66075,7 +66161,7 @@ - + @@ -66084,22 +66170,22 @@ - + - + - + - + - + @@ -66125,50 +66211,50 @@ - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + @@ -66222,9 +66308,9 @@ - + - + @@ -66236,7 +66322,7 @@ - + @@ -66248,12 +66334,12 @@ - + - + - + @@ -66274,144 +66360,144 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -66425,7 +66511,7 @@ - + @@ -66433,13 +66519,13 @@ - + - + @@ -66456,266 +66542,266 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - + - + @@ -66723,7 +66809,7 @@ - + @@ -66731,10 +66817,10 @@ - + - + @@ -66743,7 +66829,7 @@ - + @@ -66751,90 +66837,90 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -66852,116 +66938,116 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -66973,35 +67059,35 @@ - + - + - + - - + + - + - + - + - + @@ -67055,7 +67141,7 @@ - + @@ -67064,19 +67150,19 @@ - + - + - + - + - + @@ -67085,7 +67171,7 @@ - + @@ -67096,55 +67182,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67177,13 +67263,13 @@ - + - + - + @@ -67192,10 +67278,10 @@ - + - + @@ -67210,7 +67296,7 @@ - + @@ -67237,7 +67323,7 @@ - + @@ -67249,16 +67335,16 @@ - + - + - + @@ -67272,7 +67358,7 @@ - + @@ -67292,15 +67378,15 @@ - + - + - + - + @@ -67309,16 +67395,16 @@ - + - + - + @@ -67329,7 +67415,7 @@ - + @@ -67364,27 +67450,27 @@ - + - + - + - + - + - + @@ -67399,88 +67485,88 @@ - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67492,10 +67578,10 @@ - + - + @@ -67516,10 +67602,10 @@ - + - + @@ -67540,27 +67626,27 @@ - + - + - + - + - + @@ -67578,7 +67664,7 @@ - + @@ -67592,7 +67678,7 @@ - + @@ -67604,16 +67690,16 @@ - + - + - + - + @@ -67640,73 +67726,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67714,11 +67800,11 @@ - + - - + + @@ -67729,13 +67815,13 @@ - - + + - + @@ -67745,18 +67831,18 @@ - + - + - + - + @@ -67765,26 +67851,26 @@ - + - + - + - + - + - - + + @@ -67795,24 +67881,24 @@ - - - + + + - + - + - + @@ -67835,15 +67921,15 @@ - + - + - + @@ -67851,7 +67937,7 @@ - + @@ -67859,7 +67945,7 @@ - + @@ -67880,10 +67966,10 @@ - + - + @@ -67897,9 +67983,9 @@ - + - + @@ -67908,10 +67994,10 @@ - + - + @@ -67932,7 +68018,7 @@ - + @@ -67944,25 +68030,25 @@ - + - + - + - + - + @@ -67973,10 +68059,10 @@ - + - + @@ -67984,7 +68070,7 @@ - + @@ -67992,15 +68078,15 @@ - + - + - + - + @@ -68011,88 +68097,88 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -68123,7 +68209,7 @@ - + @@ -68133,313 +68219,313 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + + + + - + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - + + + - - + + - - + + - - + + - + - + - + - + - - + + - - + + - - - + + + - - - + + + - - - + + + - - + + - - + + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - - + + + - - + + - + - + @@ -68459,29 +68545,29 @@ - + - + - + - + - + - + - + @@ -68505,18 +68591,18 @@ - + - + - + @@ -68537,24 +68623,24 @@ - + - + - + - - + + @@ -68570,8 +68656,8 @@ - - + + @@ -68579,7 +68665,7 @@ - + @@ -68587,18 +68673,18 @@ - - + + - - + + - - + + @@ -68648,9 +68734,9 @@ - - - + + + @@ -68680,11 +68766,11 @@ - - + + - + @@ -68727,9 +68813,9 @@ - + - + @@ -68740,7 +68826,7 @@ - + @@ -68758,31 +68844,31 @@ - + - + - - + + - + - + - + @@ -68796,24 +68882,24 @@ - + - + - + - - + + - + @@ -68821,108 +68907,108 @@ - + - - + + - + - + - + - - + + - - + + - + - - + + - - + + - + - + - + - + - + - - + + - - - + + + - - + + - - + + - - + + - + - + @@ -68931,10 +69017,10 @@ - + - + @@ -68946,22 +69032,22 @@ - + - + - + - + - + - + @@ -68981,7 +69067,7 @@ - + @@ -68993,7 +69079,7 @@ - + @@ -69013,18 +69099,18 @@ - + - + - + - + @@ -69038,60 +69124,60 @@ - + - + - + - - - - - - - - - - + + + + + + + + + + - + - + - - + + - - + + - - + + - + - + - + @@ -69108,7 +69194,7 @@ - + @@ -69121,20 +69207,20 @@ - + - + - + - + @@ -69168,40 +69254,40 @@ - + - - + + - + - - + + - - + + - - + + - - - + + + @@ -69221,49 +69307,49 @@ - + - + - + - + - + - + - - + + - + - + - + @@ -69275,23 +69361,23 @@ - + - + - + - + @@ -69300,26 +69386,26 @@ - + - - + + - + - + - + - + @@ -69329,7 +69415,7 @@ - + @@ -69343,7 +69429,7 @@ - + @@ -69357,7 +69443,7 @@ - + @@ -69377,7 +69463,7 @@ - + @@ -69386,54 +69472,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -69450,7 +69536,7 @@ - + @@ -69464,7 +69550,7 @@ - + @@ -69481,7 +69567,7 @@ - + @@ -69495,7 +69581,7 @@ - + @@ -69512,7 +69598,7 @@ - + @@ -69535,7 +69621,7 @@ - + @@ -69561,7 +69647,7 @@ - + @@ -69578,7 +69664,7 @@ - + @@ -69595,7 +69681,7 @@ - + @@ -69612,7 +69698,7 @@ - + @@ -69626,7 +69712,7 @@ - + @@ -69643,7 +69729,7 @@ - + @@ -69672,7 +69758,7 @@ - + @@ -69692,25 +69778,25 @@ - - - - - - - - - - - + - - - - + + + + + + + + + + + + + + - + @@ -69719,7 +69805,7 @@ - + @@ -69730,12 +69816,12 @@ - + - - + + @@ -69752,16 +69838,16 @@ - - - - + + + + - + - + @@ -69773,7 +69859,7 @@ - + @@ -69788,19 +69874,19 @@ - + - + - + - + @@ -69854,10 +69940,10 @@ - + - + @@ -69866,19 +69952,19 @@ - + - + - + - + @@ -69896,7 +69982,7 @@ - + @@ -69907,130 +69993,130 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70045,14 +70131,14 @@ - + - + @@ -70063,28 +70149,28 @@ - + - + - + - + - + - + @@ -70096,13 +70182,13 @@ - + - + - + @@ -70120,40 +70206,40 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -70161,50 +70247,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70212,13 +70298,13 @@ - + - + @@ -70244,13 +70330,13 @@ - + - + @@ -70261,92 +70347,92 @@ - + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - + + + + + - + - + - + - + @@ -70359,302 +70445,302 @@ - - + + - + - + - - - + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - - + + - - + + - - - + + - - - - - + + + + + + - - - + - - - - - - + + + - + + + - - + + - - + + + - - + + + - + + + - - + + + + + - - + + + + + + - - + + + + - - + - - - + + - - + + - - + + + - - + + + + + + + + + + + + + + + + + - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - + + + - - + + - + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - - - + + + - + - + - - + + - + - + - + - + - + - + @@ -70669,25 +70755,25 @@ - + - + - + - + - + @@ -70696,16 +70782,16 @@ - + - + - + @@ -70717,7 +70803,7 @@ - + @@ -70729,9 +70815,9 @@ - + - + @@ -70752,10 +70838,10 @@ - + - + @@ -70767,7 +70853,7 @@ - + @@ -70779,12 +70865,12 @@ - + - + @@ -70793,18 +70879,18 @@ - + - + - + - + @@ -70819,7 +70905,7 @@ - + @@ -70827,68 +70913,68 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70909,18 +70995,18 @@ - + - + - + - + @@ -70940,8 +71026,8 @@ - - + + @@ -70949,7 +71035,7 @@ - + @@ -70963,12 +71049,12 @@ - + - + - + @@ -70977,13 +71063,13 @@ - + - + - + @@ -70992,19 +71078,19 @@ - + - + - + - + @@ -71013,16 +71099,16 @@ - + - + - + @@ -71052,37 +71138,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -71097,13 +71183,13 @@ - + - + - + @@ -71121,52 +71207,52 @@ - + - + - + - + - - - - - + + + + + - + - + - + - + - + - - + + - + - + - + @@ -71207,12 +71293,12 @@ - + - + - + @@ -71221,10 +71307,10 @@ - + - + @@ -71235,14 +71321,14 @@ - + - - + + @@ -71256,70 +71342,70 @@ - + - + - + - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + @@ -71327,104 +71413,104 @@ - + - - - + + + - - + + - - + + - - + + - - + + - - - + + + - - - - - - + + + + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - + - + - + @@ -71438,13 +71524,13 @@ - + - + @@ -71456,7 +71542,7 @@ - + @@ -71486,7 +71572,7 @@ - + @@ -71495,7 +71581,7 @@ - + @@ -71528,7 +71614,7 @@ - + @@ -71543,56 +71629,56 @@ - + - + - + - + - + - + - + - + - + - + - - + + - - - - - - - - - - + + + + + + + + + + @@ -71616,14 +71702,14 @@ - - + + - + - - + + @@ -71633,80 +71719,80 @@ - + - - + + - + - + - + - + - + - + - + - - + + - - + + - + - + - - + + - - - + + + - + - + @@ -71717,41 +71803,41 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -71760,7 +71846,7 @@ - + @@ -71774,64 +71860,64 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -71842,15 +71928,15 @@ - + - + - + - + @@ -71859,86 +71945,86 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -71947,21 +72033,21 @@ - + - + - + - + @@ -71969,7 +72055,7 @@ - + @@ -71977,21 +72063,21 @@ - + - + - + - + - + @@ -72006,7 +72092,7 @@ - + @@ -72030,10 +72116,10 @@ - + - + @@ -72050,27 +72136,27 @@ - + - + - + - + - + - + - + @@ -72079,7 +72165,7 @@ - + @@ -72088,7 +72174,7 @@ - + @@ -72112,30 +72198,30 @@ - + - + - + - + - + - + - + @@ -72156,7 +72242,7 @@ - + @@ -72210,45 +72296,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72262,33 +72348,33 @@ - + - + - + - + - + - + - + - + - + @@ -72303,7 +72389,7 @@ - + @@ -72311,13 +72397,13 @@ - + - + @@ -72344,48 +72430,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72420,7 +72506,7 @@ - + @@ -72438,7 +72524,7 @@ - + @@ -72458,50 +72544,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72518,372 +72604,372 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - - + + - - - + + + - - - - - + + + + + - + - - - + + + - + - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - - - + + - + - - + + - - + + - - + - - - + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - + + - - - - - - - + - - - - - - - + + + - + + - + - + + - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -72896,58 +72982,58 @@ - + - + - + - + - + - + - + - + - + - + - - + + - - + + @@ -72955,11 +73041,11 @@ - + - + @@ -73006,7 +73092,7 @@ - + @@ -73017,97 +73103,97 @@ - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - - + + - + - + - + - + @@ -73121,89 +73207,89 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + @@ -73215,46 +73301,46 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -73274,30 +73360,30 @@ - + - + - + - + - + - + - + - + - + @@ -73305,16 +73391,16 @@ - + - + - + @@ -73325,7 +73411,7 @@ - + @@ -73336,94 +73422,94 @@ - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - + - - - + + + - - - + + + - + - - + + - - + + - - + + - - + + @@ -73439,78 +73525,78 @@ - - + + - + - - - + + + - + - - - + + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + @@ -73520,30 +73606,30 @@ - - - + + + - + - - + + - + - + - + @@ -73551,7 +73637,7 @@ - + @@ -73559,17 +73645,17 @@ - + - + - + - + @@ -73578,7 +73664,7 @@ - + @@ -73590,13 +73676,13 @@ - + - + @@ -73610,43 +73696,43 @@ - + - + - + - + - + - + - + - + - + @@ -73666,34 +73752,34 @@ - + - + - + - + - + - + - + - + @@ -73705,7 +73791,7 @@ - + @@ -73723,13 +73809,13 @@ - + - + @@ -73755,16 +73841,16 @@ - + - + - + - + @@ -73818,7 +73904,7 @@ - + @@ -73829,7 +73915,7 @@ - + @@ -73873,27 +73959,27 @@ - + - + - + - + - + - + - + @@ -73959,7 +74045,7 @@ - + @@ -73985,7 +74071,7 @@ - + @@ -74029,7 +74115,7 @@ - + @@ -74058,13 +74144,13 @@ - + - + - + @@ -74084,78 +74170,78 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -74175,7 +74261,7 @@ - + @@ -74195,7 +74281,7 @@ - + @@ -74221,10 +74307,10 @@ - + - + @@ -74238,13 +74324,13 @@ - + - + - + @@ -74252,7 +74338,7 @@ - + @@ -74266,15 +74352,15 @@ - + - + - + @@ -74283,103 +74369,103 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + - - + + - - + + - + - + - + - + - + - + - - + + - + - + @@ -74388,53 +74474,53 @@ - + - + - + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + @@ -74444,13 +74530,13 @@ - + - + - + @@ -74459,40 +74545,40 @@ - + - + - + - + - + - + - + - + - + @@ -74510,7 +74596,7 @@ - + @@ -74518,7 +74604,7 @@ - + @@ -74529,14 +74615,14 @@ - + - + @@ -74552,7 +74638,7 @@ - + @@ -74565,7 +74651,7 @@ - + @@ -74576,35 +74662,35 @@ - + - + - + - + - + - + @@ -74616,16 +74702,16 @@ - + - + - + - + @@ -74637,7 +74723,7 @@ - + @@ -74656,14 +74742,14 @@ - + - + @@ -74674,7 +74760,7 @@ - + @@ -74687,29 +74773,29 @@ - + - + - + - + - + - + - + - + - + @@ -74718,9 +74804,9 @@ - + - + @@ -74735,10 +74821,10 @@ - + - + @@ -74755,17 +74841,17 @@ - + - + - + - + - + @@ -74777,9 +74863,9 @@ - + - + @@ -74794,13 +74880,13 @@ - + - + @@ -74812,9 +74898,9 @@ - + - + @@ -74823,16 +74909,16 @@ - + - + - + - + @@ -74847,18 +74933,18 @@ - + - + - + @@ -74866,7 +74952,7 @@ - + @@ -74874,9 +74960,9 @@ - - - + + + @@ -74888,29 +74974,29 @@ - + - + - + - + - + @@ -74946,13 +75032,13 @@ - - - - - + + + + + - + @@ -74961,11 +75047,11 @@ - + - + @@ -74986,15 +75072,15 @@ - - + + - + @@ -75087,7 +75173,7 @@ - + @@ -75120,15 +75206,15 @@ - + - - - + + + @@ -75139,13 +75225,13 @@ - + - + - + @@ -75178,7 +75264,7 @@ - + @@ -75187,7 +75273,7 @@ - + @@ -75198,97 +75284,97 @@ - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - + @@ -75326,16 +75412,16 @@ - + - - + + - + @@ -75361,9 +75447,9 @@ - + - + @@ -75381,7 +75467,7 @@ - + @@ -75390,7 +75476,7 @@ - + @@ -75414,10 +75500,10 @@ - + - + @@ -75426,18 +75512,18 @@ - + - + - + - + - + @@ -75446,15 +75532,15 @@ - + - + - + @@ -75463,7 +75549,7 @@ - + @@ -75473,7 +75559,7 @@ - + @@ -75481,13 +75567,13 @@ - + - + @@ -75498,13 +75584,13 @@ - + - + - + @@ -75521,16 +75607,16 @@ - + - + - + @@ -75540,7 +75626,7 @@ - + @@ -75551,27 +75637,27 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -75581,15 +75667,15 @@ - + - + - + @@ -75602,7 +75688,7 @@ - + @@ -75613,12 +75699,12 @@ - + - + @@ -75626,11 +75712,11 @@ - + - + @@ -75638,7 +75724,7 @@ - + @@ -75648,26 +75734,26 @@ - - + + - + - + - + - + @@ -75679,12 +75765,12 @@ - + - + @@ -75695,7 +75781,7 @@ - + @@ -75732,7 +75818,7 @@ - + @@ -75756,28 +75842,28 @@ - - - - - - - - - - - - - - - - - - + + + - + + + + + + + + + + + + + + + + @@ -75797,7 +75883,7 @@ - + @@ -75823,12 +75909,12 @@ - + - + @@ -75846,7 +75932,7 @@ - + @@ -75861,27 +75947,27 @@ - - - + + + - + - + - + - - + + @@ -75920,31 +76006,31 @@ - + - + - + - + - + - + @@ -75975,13 +76061,13 @@ - - - - - - - + + + + + + + @@ -75992,45 +76078,45 @@ - + - + - + - + - + - + - + - + - + @@ -76041,10 +76127,10 @@ - + - + @@ -76062,15 +76148,15 @@ - + - + - + @@ -76085,9 +76171,9 @@ - - - + + + @@ -76101,14 +76187,14 @@ - + - + - + @@ -76117,7 +76203,7 @@ - + @@ -76166,20 +76252,20 @@ - + - + - + - + - + @@ -76223,11 +76309,11 @@ - - + + - + @@ -76238,8 +76324,8 @@ - - + + @@ -76251,24 +76337,16 @@ - + - - - - - - - - - + - + @@ -76276,7 +76354,7 @@ - + @@ -76367,7 +76445,7 @@ - + @@ -76380,7 +76458,7 @@ - + @@ -76388,32 +76466,32 @@ - + - + - + - + - + - + @@ -76426,26 +76504,26 @@ - + - + - - - + + + - + - + - + @@ -76457,16 +76535,16 @@ - - + + - + - + @@ -76474,10 +76552,10 @@ - + - + @@ -76485,23 +76563,23 @@ - + - + - + - + - + - + @@ -76515,7 +76593,7 @@ - + @@ -76535,25 +76613,25 @@ - - + + - - - - - - - - - + + + + + + + + + @@ -76562,7 +76640,7 @@ - + @@ -76622,18 +76700,18 @@ - + - + - + - + @@ -76643,43 +76721,43 @@ - + - + - + - + - + - + - + - + @@ -76704,14 +76782,14 @@ - - - - + + + + - + - + @@ -76724,7 +76802,7 @@ - + @@ -76735,7 +76813,7 @@ - + @@ -76746,7 +76824,7 @@ - + @@ -76754,7 +76832,7 @@ - + @@ -76764,13 +76842,13 @@ - + - + @@ -76784,7 +76862,7 @@ - + @@ -76803,9 +76881,9 @@ - - - + + + @@ -76824,7 +76902,7 @@ - + @@ -76836,22 +76914,22 @@ - + - + - + - - - + + + @@ -76859,7 +76937,7 @@ - + @@ -76867,16 +76945,16 @@ - + - + - + @@ -76915,7 +76993,7 @@ - + @@ -76923,9 +77001,9 @@ - + - + @@ -76955,7 +77033,7 @@ - + @@ -76967,7 +77045,7 @@ - + @@ -76978,7 +77056,7 @@ - + @@ -76986,10 +77064,10 @@ - + - + @@ -76998,13 +77076,13 @@ - + - + @@ -77027,19 +77105,19 @@ - + - + - + - + @@ -77047,8 +77125,8 @@ - - + + @@ -77080,7 +77158,7 @@ - + @@ -77094,13 +77172,13 @@ - + - + - + @@ -77109,32 +77187,32 @@ - + - + - + - + - + - + - + @@ -77151,32 +77229,32 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + @@ -77231,16 +77309,16 @@ - + - + - + @@ -77248,11 +77326,11 @@ - + - + @@ -77269,14 +77347,14 @@ - + - + @@ -77331,13 +77409,13 @@ - + - + @@ -77354,7 +77432,7 @@ - + @@ -77365,7 +77443,7 @@ - + @@ -77380,7 +77458,7 @@ - + @@ -77391,19 +77469,19 @@ - - - + + + - - + + - + - + @@ -77424,7 +77502,15 @@ - + + + + + + + + + @@ -77462,9 +77548,9 @@ - - - + + + @@ -77476,16 +77562,16 @@ - - + + - + - + @@ -77528,13 +77614,13 @@ - + - + @@ -77593,26 +77679,26 @@ - - - - + + + + - + - + - - + + - + - - - - + + + + @@ -77624,8 +77710,8 @@ - - + + @@ -77680,20 +77766,20 @@ - - + + - + - + - + - + @@ -77705,7 +77791,7 @@ - + @@ -77713,27 +77799,27 @@ - + - + - + - + - + - + @@ -77748,7 +77834,7 @@ - + @@ -77758,18 +77844,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + @@ -77781,27 +77867,27 @@ - - + + - + - + - - + + - + - + @@ -77811,23 +77897,23 @@ - - + + - + - - + + - + @@ -77835,10 +77921,10 @@ - + - - + + @@ -77869,41 +77955,41 @@ - + - + - - - + + + - + - + - - - + + + - - + + - - - + + + - + - + - + - + @@ -77920,7 +78006,7 @@ - + @@ -77941,7 +78027,7 @@ - + @@ -77958,11 +78044,11 @@ - + - - + + @@ -77972,7 +78058,7 @@ - + @@ -77988,42 +78074,42 @@ - - - - - + + + + + - - + + - + - + - - + + - + - + - + - + - + - + @@ -78032,7 +78118,7 @@ - + @@ -78044,11 +78130,11 @@ - + - + @@ -78056,13 +78142,13 @@ - + - + @@ -78080,7 +78166,7 @@ - + @@ -78091,7 +78177,7 @@ - + @@ -78099,13 +78185,13 @@ - + - + @@ -78113,10 +78199,10 @@ - + - + @@ -78130,15 +78216,15 @@ - - - - - - + + + + + + - + @@ -78148,15 +78234,15 @@ - + - - + + - + @@ -78171,7 +78257,7 @@ - + @@ -78187,14 +78273,14 @@ - + - + @@ -78357,14 +78443,14 @@ - - + + - + - + @@ -78373,7 +78459,7 @@ - + @@ -78406,37 +78492,37 @@ - + - + - + - - + + - + - + - + @@ -78449,7 +78535,7 @@ - + @@ -78462,18 +78548,18 @@ - - + + - + - - + + @@ -78554,7 +78640,7 @@ - + @@ -78565,7 +78651,7 @@ - + @@ -78574,20 +78660,20 @@ - - - + + + - + - + - + @@ -78596,27 +78682,27 @@ - + - + - + - + - + @@ -78644,7 +78730,7 @@ - + @@ -78667,7 +78753,7 @@ - + @@ -78682,7 +78768,7 @@ - + @@ -78721,43 +78807,43 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -78765,34 +78851,34 @@ - + - + - + - + - - - - - + + + + + - - - - - - - - + + + + + + + + @@ -78800,7 +78886,7 @@ - + @@ -78812,7 +78898,7 @@ - + @@ -78821,31 +78907,31 @@ - - - + + + - - + + - + - + - - - + + + - + - + @@ -78868,7 +78954,7 @@ - + @@ -78880,7 +78966,7 @@ - + @@ -78903,7 +78989,7 @@ - + @@ -79046,7 +79132,7 @@ - + @@ -79061,13 +79147,13 @@ - + - + @@ -79082,16 +79168,16 @@ - + - + - - + + @@ -79169,15 +79255,15 @@ - + - + - + @@ -79192,7 +79278,7 @@ - + @@ -79231,7 +79317,7 @@ - + @@ -79291,7 +79377,7 @@ - + @@ -79305,9 +79391,9 @@ - + - + @@ -79319,8 +79405,8 @@ - - + + @@ -79341,7 +79427,7 @@ - + @@ -79378,7 +79464,7 @@ - + @@ -79387,26 +79473,26 @@ - + - + - + - + - + @@ -79419,13 +79505,13 @@ - + - + @@ -79434,60 +79520,60 @@ - + - + - - + + - - + + - + - + - + - + - + - + - + - + @@ -79507,49 +79593,49 @@ - - + + - + - + - + - + - + - + - + - + - + - + @@ -79560,7 +79646,7 @@ - + @@ -79568,9 +79654,9 @@ - - - + + + @@ -79593,15 +79679,15 @@ - + - - + + - + @@ -79618,7 +79704,7 @@ - + @@ -79628,7 +79714,7 @@ - + @@ -79637,7 +79723,7 @@ - + @@ -79658,17 +79744,17 @@ - + - + - + @@ -79692,8 +79778,8 @@ - - + + @@ -79712,8 +79798,8 @@ - - + + @@ -79725,12 +79811,12 @@ - + - + @@ -79740,7 +79826,7 @@ - + @@ -79789,7 +79875,7 @@ - + @@ -79848,7 +79934,7 @@ - + @@ -79859,7 +79945,7 @@ - + @@ -79868,22 +79954,22 @@ - + - + - + - + @@ -79912,7 +79998,7 @@ - + @@ -79921,17 +80007,17 @@ - + - + - + @@ -79965,7 +80051,7 @@ - + @@ -79978,14 +80064,14 @@ - + - + @@ -80018,7 +80104,7 @@ - + @@ -80046,12 +80132,12 @@ - + - + @@ -80083,28 +80169,28 @@ - - - - - - - + + + + + + + - + - + - + - + @@ -80114,12 +80200,12 @@ - + - + @@ -80139,7 +80225,7 @@ - + @@ -80184,7 +80270,7 @@ - + @@ -80192,15 +80278,15 @@ - - + + - + @@ -80208,209 +80294,209 @@ - + - - + + - + - + - - + + - - + + - + - - + + - + - + - + - + - - + + - - + + - + - - + + - + - + - - + + - + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - + + - + - + - + - + @@ -80418,121 +80504,121 @@ - + - + - + - + - - + + - + - - + + - - + + - - + + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - - + + - + - - + + - + @@ -80540,145 +80626,145 @@ - + - + - - + + - - + + - + - + - - + + - + - + - + - - + + - + - - + + - - + + - + - + - + - + - + - - + + - + - - + + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + @@ -80707,19 +80793,19 @@ - + - + - + @@ -80733,9 +80819,9 @@ - + - + @@ -80759,10 +80845,10 @@ - + - + @@ -80786,13 +80872,13 @@ - + - + @@ -80813,13 +80899,13 @@ - + - + - + @@ -80828,10 +80914,10 @@ - + - + @@ -80848,7 +80934,7 @@ - + @@ -80875,7 +80961,7 @@ - + @@ -80905,7 +80991,7 @@ - + @@ -80914,13 +81000,13 @@ - + - + @@ -80938,25 +81024,25 @@ - + - + - + - + - + - + @@ -80971,19 +81057,19 @@ - + - + - + - + @@ -81016,10 +81102,10 @@ - + - + @@ -81069,19 +81155,19 @@ - + - + - + - + @@ -81152,7 +81238,7 @@ - + @@ -81172,10 +81258,10 @@ - + - + @@ -81196,7 +81282,7 @@ - + @@ -81208,13 +81294,13 @@ - + - + @@ -81252,13 +81338,13 @@ - + - + @@ -81273,7 +81359,7 @@ - + @@ -81285,13 +81371,13 @@ - + - + @@ -81306,24 +81392,24 @@ - + - + - + - + - + @@ -81338,16 +81424,16 @@ - + - + - + - + @@ -81358,22 +81444,22 @@ - + - + - + - + - + @@ -81384,7 +81470,7 @@ - + @@ -81395,40 +81481,40 @@ - + - + - + - + - + - + - - + + - + - + - + - + @@ -81440,25 +81526,25 @@ - + - + - + - + - + @@ -81482,18 +81568,18 @@ - + - + - + - + @@ -81507,8 +81593,8 @@ - - + + @@ -81522,31 +81608,31 @@ - + - + - + - + - + - + - + - + @@ -81558,15 +81644,15 @@ - + - + - + @@ -81574,7 +81660,7 @@ - + @@ -81582,7 +81668,7 @@ - + @@ -81617,22 +81703,22 @@ - + - + - + - + @@ -81650,7 +81736,7 @@ - + @@ -81662,10 +81748,10 @@ - + - + @@ -81683,7 +81769,7 @@ - + @@ -81704,7 +81790,7 @@ - + @@ -81737,19 +81823,19 @@ - + - + - + - + @@ -81761,25 +81847,25 @@ - + - + - + - + - + @@ -81788,7 +81874,7 @@ - + @@ -81817,7 +81903,7 @@ - + @@ -81832,81 +81918,81 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -81936,9 +82022,9 @@ - + - + @@ -81950,10 +82036,10 @@ - + - + @@ -81998,7 +82084,7 @@ - + @@ -82016,7 +82102,7 @@ - + @@ -82024,7 +82110,7 @@ - + @@ -82053,7 +82139,7 @@ - + @@ -82062,10 +82148,10 @@ - + - + @@ -82113,10 +82199,10 @@ - + - + @@ -82140,7 +82226,7 @@ - + @@ -82179,7 +82265,7 @@ - + @@ -82209,18 +82295,18 @@ - + - + - + - + @@ -82228,7 +82314,7 @@ - + @@ -82245,12 +82331,12 @@ - + - + - + @@ -82280,15 +82366,15 @@ - + - + - + - + @@ -82327,10 +82413,10 @@ - + - + @@ -82345,34 +82431,34 @@ - + - + - + - + - + - + - + - + @@ -82390,22 +82476,22 @@ - + - + - + - + - + @@ -82416,7 +82502,7 @@ - + @@ -82427,7 +82513,7 @@ - + @@ -82445,36 +82531,36 @@ - + - + - + - + - + - + - + - + - + @@ -82485,15 +82571,15 @@ - + - + - + @@ -82505,10 +82591,10 @@ - + - + @@ -82517,7 +82603,7 @@ - + @@ -82526,7 +82612,7 @@ - + @@ -82535,7 +82621,7 @@ - + @@ -82544,24 +82630,24 @@ - + - + - + - + @@ -82581,7 +82667,7 @@ - + @@ -82589,7 +82675,7 @@ - + @@ -82598,8 +82684,8 @@ - - + + @@ -82607,18 +82693,18 @@ - + - + - + - + - + @@ -82627,7 +82713,7 @@ - + @@ -82641,60 +82727,60 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -82721,7 +82807,7 @@ - + @@ -82730,16 +82816,16 @@ - + - + - + @@ -82756,13 +82842,13 @@ - + - + @@ -82771,10 +82857,10 @@ - + - + @@ -82789,10 +82875,10 @@ - + - + @@ -82801,8 +82887,8 @@ - - + + @@ -82813,10 +82899,10 @@ - - + + - + @@ -82825,7 +82911,7 @@ - + @@ -82837,7 +82923,7 @@ - + @@ -82855,15 +82941,15 @@ - + - + - + @@ -82871,12 +82957,12 @@ - + - + @@ -82916,7 +83002,7 @@ - + @@ -83059,7 +83145,7 @@ - + @@ -83074,7 +83160,7 @@ - + @@ -83106,7 +83192,7 @@ - + @@ -83142,24 +83228,24 @@ - + - + - + - + - + - + @@ -83189,35 +83275,35 @@ - + - + - + - + - + - + - + - + - + @@ -83228,67 +83314,67 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -83300,7 +83386,7 @@ - + @@ -83314,13 +83400,13 @@ - + - + - + @@ -83329,8 +83415,8 @@ - - + + @@ -83338,34 +83424,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -83383,9 +83469,9 @@ - + - + @@ -83406,17 +83492,17 @@ - + - + - + - + - + @@ -83428,9 +83514,9 @@ - + - + @@ -83442,7 +83528,7 @@ - + @@ -83453,10 +83539,10 @@ - + - + @@ -83465,16 +83551,16 @@ - + - + - + @@ -83495,19 +83581,19 @@ - + - + - + - + - + @@ -83518,7 +83604,7 @@ - + @@ -83526,13 +83612,13 @@ - + - + - + @@ -83551,26 +83637,26 @@ - + - + - + - + - + - + @@ -83581,20 +83667,20 @@ - + - + - + - + - + @@ -83603,7 +83689,7 @@ - + @@ -83614,15 +83700,15 @@ - + - + - + - + @@ -83667,28 +83753,28 @@ - + - + - + - + - + - + - + - + @@ -83730,10 +83816,10 @@ - + - + @@ -83742,9 +83828,9 @@ - + - + @@ -83753,7 +83839,7 @@ - + @@ -83762,7 +83848,7 @@ - + @@ -83788,7 +83874,7 @@ - + @@ -83796,7 +83882,7 @@ - + @@ -83807,28 +83893,28 @@ - + - + - + - - - + + + - + @@ -83837,13 +83923,13 @@ - + - + @@ -83866,16 +83952,16 @@ - + - + - + - + @@ -83904,22 +83990,22 @@ - + - + - + - + - + @@ -83942,7 +84028,7 @@ - + @@ -83956,7 +84042,7 @@ - + @@ -83971,19 +84057,19 @@ - + - + - - + + @@ -83991,10 +84077,10 @@ - + - + @@ -84011,15 +84097,15 @@ - + - + - + @@ -84028,27 +84114,27 @@ - + - + - + - + - + - + - + - + @@ -84086,7 +84172,7 @@ - + @@ -84107,7 +84193,7 @@ - + @@ -84116,13 +84202,13 @@ - + - + - + @@ -84134,40 +84220,40 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -84176,27 +84262,27 @@ - + - + - + - + - + - + @@ -84205,102 +84291,102 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -84308,20 +84394,20 @@ - + - + - + - + @@ -84330,36 +84416,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -84368,16 +84454,16 @@ - + - + - + @@ -84386,37 +84472,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -84437,7 +84523,7 @@ - + @@ -84623,10 +84709,10 @@ - + - + @@ -84635,7 +84721,7 @@ - + @@ -84644,10 +84730,10 @@ - + - + @@ -84680,7 +84766,7 @@ - + @@ -84695,13 +84781,13 @@ - + - + @@ -84710,10 +84796,10 @@ - + - + @@ -84727,7 +84813,7 @@ - + @@ -84736,7 +84822,7 @@ - + @@ -84745,15 +84831,15 @@ - + - + - + @@ -84765,7 +84851,7 @@ - + @@ -84774,12 +84860,12 @@ - + - + - + @@ -84815,26 +84901,26 @@ - + - + - + - + - + - + - + @@ -84855,12 +84941,12 @@ - + - + - + @@ -84872,23 +84958,23 @@ - + - + - + - + - + @@ -84911,29 +84997,29 @@ - + - + - + - - - - + + + + - + - + - + @@ -84942,7 +85028,7 @@ - + @@ -84960,7 +85046,7 @@ - + @@ -84971,85 +85057,85 @@ - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85070,19 +85156,19 @@ - + - + - + - + - + @@ -85103,36 +85189,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -85228,7 +85314,7 @@ - + @@ -85236,55 +85322,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85298,7 +85384,7 @@ - + @@ -85309,27 +85395,27 @@ - + - + - + - + - + - + - + @@ -85338,9 +85424,9 @@ - + - + @@ -85349,7 +85435,7 @@ - + @@ -85366,7 +85452,7 @@ - + @@ -85387,46 +85473,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85464,40 +85550,40 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -85509,43 +85595,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -85559,18 +85645,18 @@ - + - + - + - + @@ -85585,25 +85671,25 @@ - + - + - + - + - + @@ -85627,13 +85713,13 @@ - + - + - + @@ -85645,9 +85731,9 @@ - + - + @@ -85665,7 +85751,7 @@ - + @@ -85685,7 +85771,7 @@ - + @@ -85693,7 +85779,7 @@ - + @@ -85701,7 +85787,7 @@ - + @@ -85710,7 +85796,7 @@ - + @@ -85718,7 +85804,7 @@ - + @@ -85744,31 +85830,31 @@ - + - + - + - + - + - + @@ -85780,16 +85866,16 @@ - + - + - + @@ -85803,7 +85889,7 @@ - + @@ -85812,13 +85898,13 @@ - + - + - + @@ -85836,25 +85922,25 @@ - + - + - + - + - + @@ -85862,13 +85948,13 @@ - + - + - + @@ -85897,32 +85983,32 @@ - + - + - + - + - + - + - + - + @@ -85940,83 +86026,83 @@ - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -86025,13 +86111,13 @@ - + - + @@ -86082,7 +86168,7 @@ - + @@ -86094,7 +86180,7 @@ - + @@ -86109,7 +86195,7 @@ - + @@ -86130,7 +86216,7 @@ - + @@ -86157,7 +86243,7 @@ - + @@ -86172,13 +86258,13 @@ - + - + @@ -86190,13 +86276,13 @@ - + - + @@ -86213,19 +86299,19 @@ - + - + - + - + - + @@ -86236,16 +86322,16 @@ - + - + - + @@ -86269,13 +86355,13 @@ - + - + @@ -86299,7 +86385,7 @@ - + @@ -86317,16 +86403,16 @@ - - + + - + - + @@ -86337,17 +86423,17 @@ - + - + - + - + @@ -86362,15 +86448,15 @@ - + - + - + @@ -86379,7 +86465,7 @@ - + @@ -86394,101 +86480,101 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + @@ -86506,7 +86592,7 @@ - + @@ -86517,13 +86603,13 @@ - + - + - + @@ -86532,19 +86618,19 @@ - + - + - + - + @@ -86568,9 +86654,9 @@ - + - + @@ -86579,13 +86665,13 @@ - + - + @@ -86597,15 +86683,15 @@ - + - + - + @@ -86613,7 +86699,7 @@ - + @@ -86622,17 +86708,17 @@ - + - + - + - + - + @@ -86715,16 +86801,16 @@ - + - + - + @@ -86735,24 +86821,24 @@ - + - + - + - + - + - + - + @@ -86853,7 +86939,7 @@ - + @@ -86861,16 +86947,16 @@ - + - + - + @@ -86879,7 +86965,7 @@ - + @@ -86897,19 +86983,19 @@ - + - + - - - - + + + + @@ -86932,11 +87018,11 @@ - + - - + + @@ -86950,29 +87036,29 @@ - - + + - + - + - + - + - + - + @@ -86990,10 +87076,10 @@ - + - + @@ -87001,34 +87087,34 @@ - + - + - - - + + + - + - + - + - + - + - + - + @@ -87040,7 +87126,7 @@ - + @@ -87061,22 +87147,22 @@ - + - + - + - + - + @@ -87091,7 +87177,7 @@ - + @@ -87100,25 +87186,25 @@ - + - + - + - + - + - + - + @@ -87133,7 +87219,7 @@ - + @@ -87145,10 +87231,10 @@ - + - + @@ -87157,10 +87243,10 @@ - + - + @@ -87168,7 +87254,7 @@ - + @@ -87182,7 +87268,7 @@ - + @@ -87209,7 +87295,7 @@ - + @@ -87235,15 +87321,15 @@ - + - + - + - + @@ -87251,28 +87337,28 @@ - + - + - + - + - + - + - + @@ -87281,18 +87367,18 @@ - + - + - + @@ -87307,9 +87393,9 @@ - + - + @@ -87318,7 +87404,7 @@ - + @@ -87329,10 +87415,10 @@ - + - + @@ -87340,27 +87426,27 @@ - + - + - + - + - + - + - + - + @@ -87375,304 +87461,307 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -87680,7 +87769,7 @@ - + @@ -87689,16 +87778,16 @@ - - + + - + - + - + @@ -87709,7 +87798,7 @@ - + @@ -87726,7 +87815,7 @@ - + @@ -87751,7 +87840,7 @@ - + @@ -87883,7 +87972,7 @@ - + @@ -87891,9 +87980,9 @@ - + - + @@ -87908,7 +87997,7 @@ - + @@ -87917,7 +88006,7 @@ - + @@ -87932,23 +88021,23 @@ - + - + - + - + @@ -87958,9 +88047,9 @@ - + - + @@ -87968,7 +88057,7 @@ - + @@ -87987,10 +88076,10 @@ - + - + @@ -88016,13 +88105,13 @@ - + - + - + @@ -88036,7 +88125,7 @@ - + @@ -88044,10 +88133,10 @@ - + - + @@ -88064,7 +88153,7 @@ - + @@ -88075,7 +88164,7 @@ - + @@ -88083,16 +88172,16 @@ - - + + - + - + @@ -88104,7 +88193,7 @@ - + @@ -88113,7 +88202,7 @@ - + @@ -88125,19 +88214,19 @@ - + - + - + - + - + @@ -88146,20 +88235,20 @@ - + - + - + - + - + @@ -88168,24 +88257,24 @@ - + - + - - + + - + - + @@ -88214,15 +88303,15 @@ - + - + - + @@ -88251,7 +88340,7 @@ - + @@ -88259,7 +88348,7 @@ - + @@ -88267,7 +88356,7 @@ - + @@ -88275,21 +88364,21 @@ - + - + - + - + @@ -88303,9 +88392,9 @@ - + - + @@ -88318,13 +88407,13 @@ - - + + - + @@ -88341,17 +88430,17 @@ - + - + - + @@ -88428,7 +88517,7 @@ - + @@ -88473,10 +88562,10 @@ - + - + @@ -88497,16 +88586,16 @@ - + - + - + - + @@ -88520,7 +88609,7 @@ - + @@ -88568,7 +88657,7 @@ - + @@ -88576,14 +88665,14 @@ - + - + @@ -88594,35 +88683,35 @@ - + - + - + - + - + - + - + - + - + - + @@ -88634,13 +88723,13 @@ - + - + - + @@ -88657,7 +88746,7 @@ - + @@ -88666,22 +88755,22 @@ - + - + - + - + @@ -88689,18 +88778,18 @@ - + - + - + - + @@ -88708,18 +88797,18 @@ - + - + - + @@ -88729,26 +88818,26 @@ - + - + - + - + - + - + @@ -88760,63 +88849,63 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -88845,12 +88934,12 @@ - + - + @@ -88861,7 +88950,7 @@ - + @@ -88889,68 +88978,68 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -88958,10 +89047,10 @@ - + - + @@ -88972,7 +89061,7 @@ - + @@ -88989,7 +89078,7 @@ - + @@ -89006,13 +89095,13 @@ - + - + - + @@ -89024,16 +89113,16 @@ - + - + - + - + @@ -89048,9 +89137,9 @@ - + - + @@ -89059,7 +89148,7 @@ - + @@ -89072,424 +89161,424 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + + @@ -89507,136 +89596,136 @@ - - - + + + - + - + - + - + - + - + - - - + + + - - - + + + - - + + - + - - + + - - + + - + - + - + - + - - + + - - + + - + - + - + - + - + - - + + - - - + + + - - - + + + - - + + - + - + - + - + @@ -89644,63 +89733,63 @@ - + - + - - + + - - - + + + - - + + - - + + - - - + + + - - + + - + - + - + - + @@ -89708,7 +89797,7 @@ - + @@ -89717,17 +89806,17 @@ - + - + - + @@ -89736,202 +89825,202 @@ - - + + - + - + - + - + - - + + - + - + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + - - + + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - - + + - + - + - + - - + + - - + + - + - + - + - - + + - + @@ -89940,7 +90029,7 @@ - + @@ -89948,377 +90037,377 @@ - - - + + + - + - - + + - - + + - + - + - - - + + + - + - - + + - - + + - + - - + + - + - + - + - - + + - - + + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - - - - + - - - - + - - - - - + + - - + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + @@ -90326,19 +90415,19 @@ - - + + - + - + @@ -90346,7 +90435,7 @@ - + @@ -90354,7 +90443,7 @@ - + @@ -90362,10 +90451,10 @@ - + - + @@ -90392,7 +90481,7 @@ - + @@ -90410,8 +90499,8 @@ - - + + @@ -90422,29 +90511,29 @@ - - + + - + - + - - + + - + @@ -90455,10 +90544,10 @@ - + - + @@ -90480,7 +90569,7 @@ - + @@ -90492,8 +90581,8 @@ - - + + @@ -90504,7 +90593,7 @@ - + @@ -90517,7 +90606,7 @@ - + @@ -90525,12 +90614,12 @@ - - + + - + - + @@ -90546,11 +90635,11 @@ - + - + @@ -90571,8 +90660,8 @@ - - + + @@ -90588,7 +90677,7 @@ - + @@ -90611,28 +90700,28 @@ - + - + - + - + - + - + - + @@ -90647,9 +90736,9 @@ - + - + @@ -90673,7 +90762,7 @@ - + @@ -90684,7 +90773,7 @@ - + @@ -90696,13 +90785,13 @@ - + - + @@ -90713,68 +90802,68 @@ - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - + - - + + - + - + - + - + - - + + - + - + - + @@ -90782,13 +90871,13 @@ - + - + - + @@ -90796,10 +90885,10 @@ - + - + @@ -90808,12 +90897,12 @@ - + - + @@ -90821,69 +90910,69 @@ - - - - - - - + + + + + + + - + - + - + - - - + + + - + - + - + - - + + - + - + - + - + - + - + - - + + @@ -90894,7 +90983,7 @@ - + @@ -90903,14 +90992,14 @@ - + - - + + @@ -90922,7 +91011,7 @@ - + @@ -90948,18 +91037,18 @@ - + - + - + - + @@ -90974,9 +91063,9 @@ - + - + @@ -90988,37 +91077,37 @@ - - - - + + + + - - + + - + - - + + - + - + - + - + @@ -91036,7 +91125,7 @@ - + @@ -91051,36 +91140,36 @@ - + - + - + - + - + - + - + - + @@ -91097,7 +91186,7 @@ - + @@ -91108,42 +91197,42 @@ - - - + + + - - - - - + + + + + - + - - + + - - + + - + - + - - + + - - + + @@ -91171,7 +91260,7 @@ - + @@ -91181,7 +91270,7 @@ - + @@ -91192,7 +91281,7 @@ - + @@ -91204,7 +91293,7 @@ - + @@ -91218,7 +91307,7 @@ - + @@ -91233,7 +91322,7 @@ - + @@ -91251,7 +91340,7 @@ - + @@ -91279,13 +91368,13 @@ - - + + - - + + @@ -91293,7 +91382,7 @@ - + @@ -91304,12 +91393,12 @@ - + - - + + @@ -91330,14 +91419,14 @@ - + - + @@ -91354,7 +91443,7 @@ - + @@ -91375,19 +91464,19 @@ - + - - + + - + - + @@ -91398,9 +91487,9 @@ - + - + @@ -91409,7 +91498,7 @@ - + @@ -91418,7 +91507,7 @@ - + @@ -91436,7 +91525,7 @@ - + @@ -91445,7 +91534,7 @@ - + @@ -91453,9 +91542,9 @@ - + - + @@ -91470,7 +91559,7 @@ - + @@ -91494,7 +91583,7 @@ - + @@ -91532,10 +91621,10 @@ - + - + @@ -91547,7 +91636,7 @@ - + @@ -91562,18 +91651,18 @@ - + - + - + @@ -91581,12 +91670,12 @@ - - - - - - + + + + + + @@ -91687,7 +91776,7 @@ - + @@ -91799,25 +91888,25 @@ - + - + - + - + @@ -91869,32 +91958,32 @@ - + - + - + - + - + - + @@ -91902,12 +91991,12 @@ - + - + @@ -91934,7 +92023,7 @@ - + @@ -91981,7 +92070,7 @@ - + @@ -91994,12 +92083,12 @@ - + - + @@ -92007,7 +92096,7 @@ - + @@ -92029,35 +92118,35 @@ - - + + - + - + - + - + - + - - - + + + @@ -92082,19 +92171,19 @@ - + - + - + @@ -92102,14 +92191,14 @@ - + - + @@ -92195,16 +92284,16 @@ - + - + - + @@ -92216,10 +92305,10 @@ - + - + @@ -92264,17 +92353,17 @@ - + - + - + @@ -92285,18 +92374,18 @@ - + - + - + - + - + @@ -92313,19 +92402,19 @@ - + - + - + - + - + @@ -92333,36 +92422,36 @@ - - + + - - + + - - - + + + - + - + - - + + - + @@ -92388,27 +92477,27 @@ - + - + - + - + - + @@ -92419,7 +92508,7 @@ - + @@ -92455,7 +92544,7 @@ - + @@ -92469,8 +92558,8 @@ - - + + @@ -92490,7 +92579,7 @@ - + @@ -92501,11 +92590,11 @@ - - + + - + @@ -92513,15 +92602,15 @@ - + - - + + - + @@ -92543,7 +92632,7 @@ - + @@ -92572,48 +92661,40 @@ - + - - - + + + - - - - - + + + + + - - - + + + - - + + - - - + + + - - - - - - - - @@ -92652,8 +92733,8 @@ - - + + @@ -92661,30 +92742,30 @@ - + - + - - - - + + + + - + - + - + @@ -92721,15 +92802,15 @@ - + - + - + @@ -92743,7 +92824,7 @@ - + @@ -92759,24 +92840,24 @@ - + - + - + - + - + - + @@ -92788,20 +92869,20 @@ - + - + - + - + - + @@ -92813,15 +92894,15 @@ - + - + - + @@ -92829,7 +92910,7 @@ - + @@ -92849,10 +92930,10 @@ - - - - + + + + @@ -92868,7 +92949,7 @@ - + @@ -92967,7 +93048,7 @@ - + @@ -93005,8 +93086,8 @@ - - + + @@ -93019,42 +93100,42 @@ - + - - + + - - + + - - + + - + - - + + - + - - - + + + - + @@ -93065,15 +93146,15 @@ - + - + - + - + @@ -93084,21 +93165,7 @@ - - - - - - - - - - - - - - - + @@ -93106,22 +93173,22 @@ - + - + - + - + - + - + @@ -93129,25 +93196,25 @@ - + - + - + - + @@ -93177,7 +93244,7 @@ - + @@ -93240,7 +93307,7 @@ - + @@ -93279,7 +93346,7 @@ - + @@ -93306,7 +93373,7 @@ - + @@ -93315,28 +93382,28 @@ - + - + - + - + - + - - + + - + @@ -93359,31 +93426,31 @@ - + - + - + - + - + - + - + - + @@ -93401,10 +93468,10 @@ - + - + @@ -93416,7 +93483,7 @@ - + @@ -93605,7 +93672,7 @@ - + @@ -93731,13 +93798,13 @@ - + - + - + @@ -93764,10 +93831,10 @@ - + - + @@ -93809,7 +93876,7 @@ - + @@ -93827,7 +93894,7 @@ - + @@ -93836,13 +93903,13 @@ - + - + @@ -93872,46 +93939,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -93925,15 +93992,15 @@ - + - + - + @@ -93948,7 +94015,7 @@ - + @@ -93960,7 +94027,7 @@ - + @@ -93981,7 +94048,7 @@ - + @@ -93990,7 +94057,7 @@ - + @@ -93998,7 +94065,7 @@ - + @@ -94018,7 +94085,7 @@ - + @@ -94050,18 +94117,18 @@ - + - + - + - + @@ -94085,12 +94152,12 @@ - + - + - + @@ -94126,7 +94193,7 @@ - + @@ -94138,7 +94205,7 @@ - + @@ -94153,7 +94220,7 @@ - + @@ -94161,10 +94228,10 @@ - + - + @@ -94173,15 +94240,15 @@ - + - + - + - + @@ -94193,13 +94260,13 @@ - + - + @@ -94409,16 +94476,16 @@ - + - + - + - + @@ -94430,13 +94497,13 @@ - + - + @@ -94450,91 +94517,91 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -94542,64 +94609,64 @@ - - + + - - + + - - + + - + - - - + + + - - + + - - + + - + - + - + - + @@ -94609,122 +94676,122 @@ - + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - + - + - + - + @@ -94737,21 +94804,21 @@ - + - + - + - + - - - - + + + + @@ -94760,73 +94827,73 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -94835,7 +94902,7 @@ - + @@ -94844,59 +94911,59 @@ - + - + - + - - - + + + - - + + - - + + - - + + - + - - - + + + - - - + + + - + - - + + @@ -94908,17 +94975,17 @@ - - + + - + - + @@ -94926,34 +94993,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -94964,13 +95031,13 @@ - + - + - + @@ -94979,15 +95046,15 @@ - + - - - - + + + + @@ -95022,11 +95089,11 @@ - + - + @@ -95094,7 +95161,7 @@ - + @@ -95126,16 +95193,16 @@ - + - + - + @@ -95196,21 +95263,21 @@ - + - + - - - + + + - + - + @@ -95248,12 +95315,12 @@ - - + + - + @@ -95261,7 +95328,7 @@ - + @@ -95269,7 +95336,7 @@ - + @@ -95277,12 +95344,12 @@ - + - - - + + + @@ -95295,30 +95362,30 @@ - + - + - + - + - + - + - + @@ -95334,22 +95401,22 @@ - + - + - + - - + + @@ -95366,7 +95433,7 @@ - + @@ -95387,10 +95454,10 @@ - - + + - + @@ -95399,8 +95466,8 @@ - - + + @@ -95408,25 +95475,25 @@ - + - + - + - + - + - + - + @@ -95446,14 +95513,14 @@ - - - - - - - - + + + + + + + + @@ -95470,8 +95537,8 @@ - - + + @@ -95485,11 +95552,11 @@ - + - + @@ -95506,7 +95573,7 @@ - + @@ -95517,29 +95584,29 @@ - + - + - + - + - + @@ -95567,7 +95634,7 @@ - + @@ -95631,7 +95698,7 @@ - + @@ -95658,29 +95725,29 @@ - + - + - + - + - + - + - + - + - + @@ -95701,61 +95768,61 @@ - + - - + + - - + + - - + + - - + + - - + + - + - + - + - + @@ -95763,7 +95830,7 @@ - + @@ -95771,26 +95838,26 @@ - - + + - - + + - + - + @@ -95816,10 +95883,10 @@ - + - + @@ -95852,7 +95919,7 @@ - + @@ -95879,12 +95946,12 @@ - + - + @@ -95899,13 +95966,13 @@ - + - + - + @@ -95917,55 +95984,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -95980,16 +96047,16 @@ - + - + - + @@ -96001,30 +96068,30 @@ - + - + - + - + - + - + - + - + @@ -96033,8 +96100,8 @@ - - + + @@ -96042,15 +96109,15 @@ - + - + - + - + @@ -96083,7 +96150,7 @@ - + @@ -96091,7 +96158,7 @@ - + @@ -96108,15 +96175,15 @@ - + - + - + - + @@ -96128,7 +96195,7 @@ - + @@ -96154,7 +96221,7 @@ - + @@ -96166,10 +96233,10 @@ - + - + @@ -96195,7 +96262,7 @@ - + @@ -96209,7 +96276,7 @@ - + @@ -96220,7 +96287,7 @@ - + @@ -96234,7 +96301,7 @@ - + @@ -96245,10 +96312,10 @@ - + - + @@ -96259,7 +96326,7 @@ - + @@ -96282,24 +96349,24 @@ - + - + - + - + - + - + - + @@ -96310,7 +96377,7 @@ - + @@ -96324,7 +96391,7 @@ - + @@ -96338,7 +96405,7 @@ - + @@ -96352,25 +96419,25 @@ - + - + - + - + - + - + - + @@ -96381,7 +96448,7 @@ - + @@ -96392,16 +96459,16 @@ - + - + - + - + @@ -96418,114 +96485,114 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - + - - + + - + - + - + - - + + - - + + - - + + - + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - + @@ -96538,28 +96605,28 @@ - - + + - + - + - + - + @@ -96572,9 +96639,17 @@ + + + + + + + + - + @@ -96586,22 +96661,22 @@ - - + + - + - + - + @@ -96610,20 +96685,20 @@ - + - + - - - + + + @@ -96634,11 +96709,11 @@ - + - + @@ -96647,14 +96722,14 @@ - + - + @@ -96665,9 +96740,9 @@ - + - + @@ -96675,7 +96750,7 @@ - + @@ -96683,13 +96758,13 @@ - + - + @@ -96697,45 +96772,45 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -96801,7 +96876,7 @@ - + @@ -96816,7 +96891,7 @@ - + @@ -96831,7 +96906,7 @@ - + @@ -96854,16 +96929,16 @@ - + - + - + @@ -96871,15 +96946,15 @@ - + - + - + - + @@ -96893,15 +96968,7 @@ - - - - - - - - - + @@ -96909,7 +96976,7 @@ - + @@ -96917,7 +96984,7 @@ - + @@ -96928,7 +96995,7 @@ - + @@ -96936,7 +97003,7 @@ - + @@ -96965,24 +97032,24 @@ - + - + - + - + - + @@ -97000,13 +97067,13 @@ - + - + - + @@ -97030,34 +97097,34 @@ - + - + - + - + - + - + - + - + @@ -97074,20 +97141,20 @@ - + - + - + - + - + @@ -97096,18 +97163,18 @@ - + - + - + - + - + @@ -97125,10 +97192,10 @@ - + - + @@ -97137,13 +97204,13 @@ - + - + - + @@ -97223,7 +97290,7 @@ - + @@ -97244,10 +97311,10 @@ - + - + @@ -97265,7 +97332,7 @@ - + @@ -97277,10 +97344,10 @@ - + - + @@ -97295,13 +97362,13 @@ - + - + @@ -97316,13 +97383,13 @@ - + - + - + @@ -97330,7 +97397,7 @@ - + @@ -97338,10 +97405,10 @@ - + - + @@ -97355,7 +97422,7 @@ - + @@ -97369,7 +97436,7 @@ - + @@ -97377,15 +97444,15 @@ - + - + - + - + @@ -97397,319 +97464,319 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -97735,23 +97802,23 @@ - + - + - + - + - + - + - + @@ -97760,7 +97827,7 @@ - + @@ -97774,32 +97841,32 @@ - + - + - + - + - + - + - + - + - + - + @@ -97807,27 +97874,27 @@ - + - + - + - + - + - + - + - + - + @@ -97835,12 +97902,12 @@ - + - + @@ -97848,7 +97915,7 @@ - + @@ -97871,10 +97938,10 @@ - + - + @@ -97885,12 +97952,12 @@ - + - + - + @@ -97908,7 +97975,7 @@ - + @@ -97918,7 +97985,7 @@ - + @@ -97929,7 +97996,7 @@ - + @@ -97938,74 +98005,74 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -98014,38 +98081,38 @@ - + - + - + - + - + - + - + - + - + - + @@ -98069,587 +98136,587 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + - - - + + + + + - - - - + + - - - + + - - - + + + - - - - + + - - - + + + - - - + + + - - - - - + + + + - - - + + + - - - + + + + - - - + + + - - - - - + + + - - - - - - - + + + + - - - + + + - - - + + + - - - - + + + + + - - - + + - - - + + + - - + + + - - - + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - + + + + - - - - - - - + + + - - - - + + + - - - + + + - - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + @@ -98658,44 +98725,44 @@ - - + + - + - + - - + + - + - + - + - + @@ -98706,216 +98773,216 @@ - + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - - + + - - - - - + + + + + - - - + + + - - - + + + - - - - + + + + - - - - - - + + + + + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -98926,144 +98993,144 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -99072,9 +99139,9 @@ - + - + @@ -99083,7 +99150,7 @@ - + @@ -99098,31 +99165,31 @@ - + - + - + - + - + - + - - + + - + @@ -99131,53 +99198,53 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -99191,67 +99258,67 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -99259,9 +99326,9 @@ - + - + @@ -99270,7 +99337,7 @@ - + @@ -99278,19 +99345,19 @@ - + - + - + - + - + @@ -99305,32 +99372,32 @@ - + - + - + - + - + - + - + - + - + @@ -99344,22 +99411,22 @@ - + - + - + - + - + - + @@ -99377,7 +99444,7 @@ - + @@ -99388,7 +99455,7 @@ - + @@ -99399,13 +99466,13 @@ - + - + @@ -99416,75 +99483,75 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - + + + - + - + - + - + - - - - - - - - - - - - - - - - - - + - - + + + + + - - + + + + + + + + + + + + + + + + @@ -99510,9 +99577,9 @@ - + - + @@ -99527,42 +99594,42 @@ - + - + - + - + - - + + - + - + - + - + - + @@ -99571,21 +99638,21 @@ - + - + - - + + - + @@ -99594,17 +99661,17 @@ - + - + - - + + @@ -99615,22 +99682,22 @@ - + - + - + - + @@ -99639,7 +99706,7 @@ - + @@ -99650,7 +99717,7 @@ - + @@ -99691,7 +99758,7 @@ - + @@ -99705,36 +99772,36 @@ - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - + + - - + + + + + + @@ -99744,7 +99811,7 @@ - + @@ -99763,21 +99830,21 @@ - + - + - + - + @@ -99788,77 +99855,77 @@ - + - - + + - - + + - + - - + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - + + - + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + @@ -99866,7 +99933,7 @@ - + @@ -99903,20 +99970,20 @@ - - + + - + - + - + @@ -99927,13 +99994,13 @@ - + - + - + @@ -99942,7 +100009,7 @@ - + @@ -99975,24 +100042,24 @@ - + - + - + - + - + @@ -100037,20 +100104,20 @@ - + - + - + - + - + - + @@ -100058,7 +100125,7 @@ - + @@ -100066,24 +100133,24 @@ - + - + - + - - - - - - - + + + + + + + @@ -100094,40 +100161,13 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -100166,7 +100206,7 @@ - + @@ -100180,16 +100220,16 @@ - + - + - + - + @@ -100209,7 +100249,7 @@ - + @@ -100217,15 +100257,15 @@ - - - + + + - - + + @@ -100237,23 +100277,23 @@ - + - + - + - + - + - + @@ -100261,27 +100301,27 @@ - + - + - - + + - + - + @@ -100308,9 +100348,9 @@ - + - + @@ -100319,7 +100359,7 @@ - + @@ -100334,7 +100374,7 @@ - + @@ -100365,53 +100405,23 @@ - - + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -100419,7 +100429,7 @@ - + @@ -100430,7 +100440,7 @@ - + @@ -100444,7 +100454,7 @@ - + @@ -100458,7 +100468,7 @@ - + @@ -100472,63 +100482,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -100542,21 +100496,21 @@ - + - + - + - + - + @@ -100573,61 +100527,158 @@ - + - + - + - + - + - + - + - - + + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + - + @@ -100640,95 +100691,109 @@ - - - + + + - - + + - - - + + + - + - - + + - + - - + + - - + + - - + + - + - - - - + + + + - - - + + + - + - + - + - + - + + + + + + + + + + + + + + + @@ -100742,135 +100807,135 @@ - - - - + + + + - + - + - + - + - + - + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + @@ -100897,13 +100962,13 @@ - + - + @@ -100969,10 +101034,10 @@ - + - + @@ -100999,7 +101064,7 @@ - + @@ -101008,13 +101073,13 @@ - + - + - + @@ -101026,10 +101091,10 @@ - + - + @@ -101038,13 +101103,13 @@ - + - + - + @@ -101083,18 +101148,18 @@ - + - + - + - + @@ -101102,9 +101167,9 @@ - + - + @@ -101128,7 +101193,7 @@ - + @@ -101136,13 +101201,13 @@ - + - + @@ -101162,12 +101227,12 @@ - + - + - + @@ -101182,7 +101247,7 @@ - + @@ -101193,7 +101258,7 @@ - + @@ -101216,19 +101281,19 @@ - + - + - + - + @@ -101242,9 +101307,9 @@ - + - + @@ -101259,7 +101324,7 @@ - + @@ -101268,7 +101333,7 @@ - + @@ -101286,10 +101351,10 @@ - + - + @@ -101300,7 +101365,7 @@ - + @@ -101311,12 +101376,12 @@ - + - + @@ -101325,7 +101390,7 @@ - + @@ -101337,7 +101402,7 @@ - + @@ -101349,16 +101414,16 @@ - + - + - + @@ -101367,10 +101432,10 @@ - + - + @@ -101394,38 +101459,38 @@ - + - + - + - + - + - + - + - + - + @@ -101433,15 +101498,15 @@ - + - + - + @@ -101449,12 +101514,12 @@ - + - + - + @@ -101481,10 +101546,10 @@ - + - + @@ -101496,13 +101561,13 @@ - + - + - + @@ -101511,7 +101576,7 @@ - + @@ -101520,13 +101585,13 @@ - + - + - + @@ -101562,7 +101627,7 @@ - + @@ -101574,7 +101639,7 @@ - + @@ -101592,18 +101657,18 @@ - + - + - + - + @@ -101620,16 +101685,16 @@ - + - + - + @@ -101637,7 +101702,7 @@ - + @@ -101663,33 +101728,33 @@ - + - + - + - + - + - + - + - + - + - + @@ -101704,13 +101769,13 @@ - + - + @@ -101719,12 +101784,12 @@ - + - + - + @@ -101757,7 +101822,7 @@ - + @@ -101766,13 +101831,13 @@ - + - + @@ -101786,15 +101851,15 @@ - + - + - + - + @@ -101803,10 +101868,10 @@ - + - + @@ -101817,15 +101882,15 @@ - + - + - + @@ -101840,7 +101905,7 @@ - + @@ -101851,12 +101916,12 @@ - + - + - + @@ -101868,15 +101933,15 @@ - + - + - + - + @@ -101885,22 +101950,22 @@ - + - + - + - + - + @@ -101914,7 +101979,7 @@ - + @@ -101928,12 +101993,12 @@ - + - + - + @@ -101945,7 +102010,7 @@ - + @@ -101953,10 +102018,10 @@ - + - + @@ -101970,37 +102035,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -102020,7 +102085,7 @@ - + @@ -102028,16 +102093,16 @@ - + - + - + - + @@ -102046,39 +102111,39 @@ - + - + - + - + - + - + @@ -102086,24 +102151,24 @@ - + - + - + - + - + - + - + @@ -102115,7 +102180,7 @@ - + @@ -102126,7 +102191,7 @@ - + @@ -102134,15 +102199,15 @@ - + - + - + - + @@ -102156,7 +102221,7 @@ - + @@ -102164,7 +102229,7 @@ - + @@ -102176,15 +102241,15 @@ - + - + - + @@ -102204,27 +102269,27 @@ - + - + - + - + - + - + @@ -102232,7 +102297,7 @@ - + @@ -102243,10 +102308,10 @@ - + - + @@ -102275,336 +102340,336 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -102612,7 +102677,7 @@ - + @@ -102621,12 +102686,12 @@ - + - + - + @@ -102641,19 +102706,19 @@ - + - + - + - + @@ -102665,22 +102730,22 @@ - + - + - + - + - + @@ -102695,10 +102760,10 @@ - + - + @@ -102751,13 +102816,13 @@ - + - + @@ -102768,7 +102833,7 @@ - + @@ -102789,7 +102854,7 @@ - + @@ -102804,7 +102869,7 @@ - + @@ -102818,7 +102883,7 @@ - + @@ -102826,48 +102891,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -102878,7 +102943,7 @@ - + @@ -102913,10 +102978,10 @@ - + - + @@ -102925,7 +102990,7 @@ - + @@ -102958,7 +103023,7 @@ - + @@ -102967,10 +103032,10 @@ - + - + @@ -102979,21 +103044,21 @@ - + - + - + - + @@ -103004,7 +103069,7 @@ - + @@ -103042,16 +103107,16 @@ - + - + - + - + @@ -103069,10 +103134,10 @@ - + - + @@ -103090,13 +103155,13 @@ - + - + - + @@ -103117,7 +103182,7 @@ - + @@ -103138,7 +103203,7 @@ - + @@ -103167,7 +103232,7 @@ - + @@ -103178,7 +103243,7 @@ - + @@ -103186,7 +103251,7 @@ - + @@ -103203,10 +103268,10 @@ - + - + @@ -103244,7 +103309,7 @@ - + @@ -103279,7 +103344,7 @@ - + @@ -103359,7 +103424,7 @@ - + @@ -103368,9 +103433,9 @@ - + - + @@ -103418,7 +103483,7 @@ - + @@ -103427,12 +103492,12 @@ - + - + - + @@ -103461,9 +103526,9 @@ - + - + @@ -103478,7 +103543,7 @@ - + @@ -103486,9 +103551,9 @@ - + - + @@ -103497,7 +103562,7 @@ - + @@ -103518,25 +103583,25 @@ - + - + - + - + - + - + @@ -103545,23 +103610,23 @@ - + - + - + - + - + @@ -103570,7 +103635,7 @@ - + @@ -103588,9 +103653,9 @@ - + - + @@ -103602,7 +103667,7 @@ - + @@ -103611,16 +103676,16 @@ - + - + - + - + @@ -103632,7 +103697,7 @@ - + @@ -103649,9 +103714,9 @@ - + - + @@ -103666,12 +103731,12 @@ - + - + - + @@ -103686,7 +103751,7 @@ - + @@ -103698,10 +103763,10 @@ - + - + @@ -103719,22 +103784,22 @@ - + - + - + - + - + @@ -103764,24 +103829,24 @@ - + - + - + - + - + - + @@ -103790,15 +103855,15 @@ - + - + - + - + @@ -103806,7 +103871,7 @@ - + @@ -103842,21 +103907,21 @@ - + - + - + - + - + @@ -103886,7 +103951,7 @@ - + @@ -103909,9 +103974,9 @@ - + - + @@ -103935,10 +104000,10 @@ - + - + @@ -103949,7 +104014,7 @@ - + @@ -103957,7 +104022,7 @@ - + @@ -103968,7 +104033,7 @@ - + @@ -103976,45 +104041,45 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -104023,7 +104088,7 @@ - + @@ -104035,18 +104100,18 @@ - + - + - + - + @@ -104054,7 +104119,7 @@ - + @@ -104062,7 +104127,7 @@ - + @@ -104070,12 +104135,12 @@ - + - + - + @@ -104096,7 +104161,7 @@ - + @@ -104120,16 +104185,16 @@ - + - + - + @@ -104144,7 +104209,7 @@ - + @@ -104152,7 +104217,7 @@ - + @@ -104160,7 +104225,7 @@ - + @@ -104174,15 +104239,15 @@ - + - + - + - + @@ -104194,12 +104259,12 @@ - + - + @@ -104231,7 +104296,7 @@ - + @@ -104248,35 +104313,35 @@ - + - + - + - + - + - + - + - + - + @@ -104306,16 +104371,16 @@ - + - + - + @@ -104327,483 +104392,483 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + - - - + + - - - + + - - - + + - + - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + - + - + - - + - + - + - + - - + - + - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -104815,143 +104880,143 @@ - - + + - - + + - - + + - - + + - + - - + + - + - - + + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + @@ -104959,230 +105024,230 @@ - - + + - - + + - + - - + + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + - - - + + + - - - + + + - - - + + - - - - + + + - - - - + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - + - - + + - - + + - - + + - - - + + + - - + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - + + - - - + + + - + @@ -105192,14 +105257,14 @@ - + - + @@ -105209,7 +105274,7 @@ - + @@ -105217,7 +105282,7 @@ - + @@ -105364,7 +105429,7 @@ - + @@ -105652,13 +105717,13 @@ - + - + @@ -105675,12 +105740,12 @@ - + - - - - + + + + @@ -105693,9 +105758,9 @@ - - - + + + @@ -105710,36 +105775,36 @@ - + - + - + - + - + - + - + @@ -105749,7 +105814,7 @@ - + @@ -105771,74 +105836,74 @@ - + - + - + - + - - - + + + - - - + + + - + - + - - + + - + - - + + - + - + - + - + @@ -105850,22 +105915,22 @@ - + - + - + - + @@ -105873,57 +105938,57 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -105934,15 +105999,15 @@ - + - + - + @@ -105950,10 +106015,10 @@ - + - + @@ -105964,10 +106029,10 @@ - + - + @@ -105975,20 +106040,20 @@ - + - + - + - + - + @@ -105997,17 +106062,17 @@ - + - + - + - + - + @@ -106016,71 +106081,71 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -106091,29 +106156,29 @@ - + - + - + - + - + - + - + @@ -106127,7 +106192,7 @@ - + @@ -106141,10 +106206,10 @@ - + - + @@ -106155,10 +106220,10 @@ - + - + @@ -106175,10 +106240,10 @@ - + - + @@ -106195,7 +106260,7 @@ - + @@ -106206,23 +106271,23 @@ - + - + - + - + - + @@ -106230,7 +106295,7 @@ - + @@ -106238,7 +106303,7 @@ - + @@ -106246,7 +106311,7 @@ - + @@ -106257,10 +106322,10 @@ - + - + @@ -106268,7 +106333,7 @@ - + @@ -106279,7 +106344,7 @@ - + @@ -106293,10 +106358,10 @@ - + - + @@ -106304,7 +106369,7 @@ - + @@ -106315,10 +106380,10 @@ - + - + @@ -106327,19 +106392,19 @@ - + - - - + + + - - + + - + @@ -106348,22 +106413,22 @@ - + - - + + - - - + + + - - - + + + @@ -106371,24 +106436,24 @@ - + - - - + + + - + - - + + - + @@ -106403,7 +106468,7 @@ - + @@ -106411,7 +106476,7 @@ - + @@ -106426,13 +106491,13 @@ - + - + - + @@ -106455,19 +106520,19 @@ - + - + - + - + @@ -106485,20 +106550,20 @@ - + - - + + - + - + @@ -106513,7 +106578,7 @@ - + @@ -106521,12 +106586,12 @@ - + - - - + + + @@ -106534,11 +106599,11 @@ - + - + @@ -106546,9 +106611,9 @@ - + - + @@ -106559,7 +106624,7 @@ - + @@ -106567,27 +106632,27 @@ - + - - + + - + - - + + - + - + @@ -106605,11 +106670,11 @@ - + - + @@ -106644,22 +106709,22 @@ - + - + - + - + - + - + @@ -106680,10 +106745,10 @@ - + - + @@ -106692,7 +106757,7 @@ - + @@ -106700,9 +106765,9 @@ - + - + @@ -106711,12 +106776,12 @@ - + - + - + @@ -106746,17 +106811,9 @@ - - - - - - - - - + - + @@ -106768,7 +106825,7 @@ - + @@ -106792,51 +106849,51 @@ - - - - + + + + - + - + - - - - + + + + - + - + - + - + - + - + @@ -106845,17 +106902,17 @@ - - + + - + - + @@ -106870,64 +106927,64 @@ - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - + - + @@ -106936,20 +106993,20 @@ - + - - - + + + - + - + @@ -106961,31 +107018,31 @@ - + - + - + - - + + - + - + - + - + - + @@ -106996,7 +107053,7 @@ - + @@ -107007,7 +107064,7 @@ - + @@ -107024,119 +107081,119 @@ - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + @@ -107160,9 +107217,9 @@ - + - + @@ -107183,124 +107240,124 @@ - + - + - + - + - + - + - - - - - - - - - - + + + + + + + + + + - - - + + + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - + - - + + - - - + + + - - - + + + - - + + - + - + - + @@ -107318,12 +107375,12 @@ - + - + @@ -107338,7 +107395,7 @@ - + @@ -107353,10 +107410,10 @@ - + - + @@ -107377,7 +107434,7 @@ - + @@ -107386,7 +107443,7 @@ - + @@ -107403,41 +107460,41 @@ - + - + - + - + - + - + - + - - - - - - + + + + + + - + - + @@ -107449,81 +107506,81 @@ - + - - + + - - + + - - + + - - + + - - + + - + - + - + - - + + - + - - + + - + - - + + - + - + @@ -107538,19 +107595,19 @@ - + - + - + - + @@ -107567,36 +107624,36 @@ - - - + + + - + - + - - + + - + - - + + - + @@ -107610,45 +107667,45 @@ - - + + - - + + - + - - + + - + - + - - + + - - + + @@ -107659,26 +107716,26 @@ - + - + - + - + - + - + @@ -107690,78 +107747,78 @@ - - - - - - + + + + + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -107770,34 +107827,34 @@ - - - + + + - + - + - + - + - - + + @@ -107805,13 +107862,13 @@ - + - + @@ -107825,10 +107882,10 @@ - + - + @@ -107837,7 +107894,7 @@ - + @@ -107852,15 +107909,15 @@ - + - + - + - + @@ -107880,102 +107937,102 @@ - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + + - + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + @@ -107983,8 +108040,8 @@ - - + + @@ -107992,133 +108049,133 @@ - - + + - - - + + + - + - + - + - + - - + + - + - - + + - + - - + + - - - + + + - + - + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + @@ -108130,32 +108187,32 @@ - + - + - + - + - + - + - + @@ -108169,7 +108226,7 @@ - + @@ -108187,7 +108244,7 @@ - + @@ -108208,13 +108265,13 @@ - + - + - + @@ -108225,7 +108282,7 @@ - + @@ -108234,7 +108291,7 @@ - + @@ -108249,7 +108306,7 @@ - + @@ -108261,43 +108318,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -108312,13 +108369,13 @@ - + - + @@ -108327,31 +108384,31 @@ - + - + - + - + - + @@ -108381,13 +108438,13 @@ - + - + - + @@ -108399,12 +108456,12 @@ - + - + @@ -108412,19 +108469,19 @@ - + - + - + @@ -108433,7 +108490,7 @@ - + @@ -108442,19 +108499,19 @@ - + - + - + - + - + @@ -108511,10 +108568,10 @@ - + - + @@ -108525,7 +108582,7 @@ - + @@ -108554,48 +108611,48 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -108622,7 +108679,7 @@ - + @@ -108633,28 +108690,28 @@ - + - + - + - + - + - + @@ -108667,7 +108724,7 @@ - + @@ -108675,13 +108732,13 @@ - + - + @@ -108693,65 +108750,65 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -108763,15 +108820,15 @@ - + - + - + - + @@ -108798,23 +108855,23 @@ - + - + - + - + - + @@ -108822,7 +108879,7 @@ - + @@ -108857,35 +108914,35 @@ - + - + - + - + - + - + - + - + - + @@ -108902,7 +108959,7 @@ - + @@ -108913,7 +108970,7 @@ - + @@ -108921,15 +108978,15 @@ - + - + - + @@ -108937,7 +108994,7 @@ - + @@ -108954,7 +109011,7 @@ - + @@ -108980,7 +109037,7 @@ - + @@ -108988,10 +109045,10 @@ - + - + @@ -109023,10 +109080,10 @@ - + - + @@ -109037,7 +109094,7 @@ - + @@ -109052,10 +109109,10 @@ - + - + @@ -109073,7 +109130,7 @@ - + @@ -109085,7 +109142,7 @@ - + @@ -109096,37 +109153,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -109147,9 +109204,9 @@ - + - + @@ -109158,16 +109215,16 @@ - + - + - + @@ -109180,66 +109237,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -109247,19 +109304,19 @@ - + - + - + - + @@ -109270,7 +109327,7 @@ - + @@ -109278,18 +109335,18 @@ - + - + - + - + - + @@ -109300,7 +109357,7 @@ - + @@ -109311,15 +109368,15 @@ - + - + - + - + @@ -109331,16 +109388,16 @@ - + - + - + @@ -109391,25 +109448,25 @@ - + - + - + - + - + @@ -109433,7 +109490,7 @@ - + @@ -109475,7 +109532,7 @@ - + @@ -109483,10 +109540,10 @@ - + - + @@ -109516,26 +109573,26 @@ - + - + - + - + - + - + @@ -109546,21 +109603,21 @@ - + - + - + - + - + - + @@ -109568,7 +109625,7 @@ - + @@ -109576,23 +109633,23 @@ - + - + - + - + - + @@ -109610,13 +109667,13 @@ - + - + @@ -109625,18 +109682,18 @@ - + - + - + - + @@ -109651,16 +109708,16 @@ - - + + - + - + @@ -109699,7 +109756,7 @@ - + @@ -109707,19 +109764,19 @@ - + - + - + - + @@ -109734,10 +109791,10 @@ - + - + @@ -109793,16 +109850,16 @@ - + - + - + @@ -109831,7 +109888,7 @@ - + @@ -109854,48 +109911,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -109904,140 +109961,140 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -110048,15 +110105,15 @@ - + - + - + - + @@ -110067,9 +110124,9 @@ - + - + @@ -110093,81 +110150,81 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -110200,7 +110257,7 @@ - + @@ -110209,15 +110266,15 @@ - + - + - + @@ -110232,203 +110289,203 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + - - + + - + - + - + - + - + - - + + - + - + - + - - + + @@ -110437,12 +110494,12 @@ - + - + @@ -110456,26 +110513,26 @@ - + - + - - + + - - + + @@ -110483,406 +110540,406 @@ - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + + + - - + - + - - - + + - - + + - - - + + - - + + + - - + + - - - + + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - + + + - - + + - - + - - + + - - - - - + + + - - - - - + - - - - + + - - - - - + + - + - - - + + + + - - + - - + + + - + + + + + + + + + + + + + + + + + + + + + + + - - + + - + + - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - + + + - - - - - + + - - + + - - - + - - - - - + + - - - - - + + + - - - + + + - - + + + - + + - - - + + + + + - - + + + + + - + + + + + - + + - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - + - + @@ -110890,7 +110947,7 @@ - + @@ -110898,7 +110955,7 @@ - + @@ -110907,8 +110964,8 @@ - - + + @@ -110934,113 +110991,113 @@ - + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + @@ -111052,62 +111109,62 @@ - + - - - - + + + + - + - + - - - + + + - - - - + + + + - - - + + + - + - + - + @@ -111121,7 +111178,7 @@ - + @@ -111147,7 +111204,7 @@ - + @@ -111165,78 +111222,78 @@ - - + + - + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + @@ -111244,59 +111301,59 @@ - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + @@ -111308,13 +111365,13 @@ - + - + - + @@ -111365,10 +111422,10 @@ - + - + @@ -111392,7 +111449,7 @@ - + @@ -111404,21 +111461,21 @@ - + - + - + - + - + @@ -111427,13 +111484,13 @@ - + - + @@ -111441,10 +111498,10 @@ - + - + @@ -111513,7 +111570,7 @@ - + @@ -111528,10 +111585,10 @@ - + - + @@ -111596,7 +111653,7 @@ - + @@ -111608,7 +111665,7 @@ - + @@ -111619,9 +111676,9 @@ - + - + @@ -111636,25 +111693,25 @@ - + - + - + - + - + - + - + @@ -111750,7 +111807,7 @@ - + @@ -111758,10 +111815,10 @@ - + - + @@ -111770,21 +111827,21 @@ - + - + - + - + @@ -111795,7 +111852,7 @@ - + @@ -111815,42 +111872,42 @@ - - - - - - - - - - - + + + + + + + + + + + - - - + + + - - + + - - + + - + - + @@ -111862,7 +111919,7 @@ - + @@ -111872,6 +111929,6 @@ From 0ffae9128ab3e0bf098388ce5bc96a03d76a2029 Mon Sep 17 00:00:00 2001 From: Martijn Coenen Date: Tue, 10 Mar 2020 14:12:30 +0100 Subject: [PATCH 018/136] UPSTREAM: loop: Only change blocksize when needed. Return early in loop_set_block_size() if the requested block size is identical to the one we already have; this avoids expensive calls to freeze the block queue. Bug: 148607611 Reviewed-by: Christoph Hellwig Signed-off-by: Martijn Coenen Signed-off-by: Jens Axboe (cherry picked from commit 7e81f99afd91c937f0e66dc135e26c1c4f78b003) Change-Id: I61778680579dbfeeb193133527a3926d376e0bac --- drivers/block/loop.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/block/loop.c b/drivers/block/loop.c index ef6e251857c8..8cc6a4ede40f 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -1536,16 +1536,16 @@ static int loop_set_block_size(struct loop_device *lo, unsigned long arg) if (arg < 512 || arg > PAGE_SIZE || !is_power_of_2(arg)) return -EINVAL; - if (lo->lo_queue->limits.logical_block_size != arg) { - sync_blockdev(lo->lo_device); - kill_bdev(lo->lo_device); - } + if (lo->lo_queue->limits.logical_block_size == arg) + return 0; + + sync_blockdev(lo->lo_device); + kill_bdev(lo->lo_device); blk_mq_freeze_queue(lo->lo_queue); /* kill_bdev should have truncated all the pages */ - if (lo->lo_queue->limits.logical_block_size != arg && - lo->lo_device->bd_inode->i_mapping->nrpages) { + if (lo->lo_device->bd_inode->i_mapping->nrpages) { err = -EAGAIN; pr_warn("%s: loop%d (%s) has still dirty pages (nrpages=%lu)\n", __func__, lo->lo_number, lo->lo_file_name, From d66054cf6a36a48645f7e06a1bee44013c9f8fbc Mon Sep 17 00:00:00 2001 From: Martijn Coenen Date: Tue, 10 Mar 2020 14:06:54 +0100 Subject: [PATCH 019/136] UPSTREAM: loop: Only freeze block queue when needed. __loop_update_dio() can be called as a part of loop_set_fd(), when the block queue is not yet up and running; avoid freezing the block queue in that case, since that is an expensive operation. Bug: 148607611 Reviewed-by: Christoph Hellwig Reviewed-by: Chaitanya Kulkarni Signed-off-by: Martijn Coenen Signed-off-by: Jens Axboe (cherry picked from commit 0fbcf57982346763ec636f176d5afaa367b5f71b) Change-Id: I17d8de6b6b54a667703d60ea1c62449bb14331da --- drivers/block/loop.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 8cc6a4ede40f..40961d9dd061 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -214,7 +214,8 @@ static void __loop_update_dio(struct loop_device *lo, bool dio) * LO_FLAGS_READ_ONLY, both are set from kernel, and losetup * will get updated by ioctl(LOOP_GET_STATUS) */ - blk_mq_freeze_queue(lo->lo_queue); + if (lo->lo_state == Lo_bound) + blk_mq_freeze_queue(lo->lo_queue); lo->use_dio = use_dio; if (use_dio) { blk_queue_flag_clear(QUEUE_FLAG_NOMERGES, lo->lo_queue); @@ -223,7 +224,8 @@ static void __loop_update_dio(struct loop_device *lo, bool dio) blk_queue_flag_set(QUEUE_FLAG_NOMERGES, lo->lo_queue); lo->lo_flags &= ~LO_FLAGS_DIRECT_IO; } - blk_mq_unfreeze_queue(lo->lo_queue); + if (lo->lo_state == Lo_bound) + blk_mq_unfreeze_queue(lo->lo_queue); } static int From c5c2143f739bb283a0ef7973eb32d7f98d023908 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Wed, 18 Mar 2020 16:05:11 -0700 Subject: [PATCH 020/136] FROMLIST: kmod: make request_module() return an error when autoloading is disabled It's long been possible to disable kernel module autoloading completely (while still allowing manual module insertion) by setting /proc/sys/kernel/modprobe to the empty string. This can be preferable to setting it to a nonexistent file since it avoids the overhead of an attempted execve(), avoids potential deadlocks, and avoids the call to security_kernel_module_request() and thus on SELinux-based systems eliminates the need to write SELinux rules to dontaudit module_request. However, when module autoloading is disabled in this way, request_module() returns 0. This is broken because callers expect 0 to mean that the module was successfully loaded. Apparently this was never noticed because this method of disabling module autoloading isn't used much, and also most callers don't use the return value of request_module() since it's always necessary to check whether the module registered its functionality or not anyway. But improperly returning 0 can indeed confuse a few callers, for example get_fs_type() in fs/filesystems.c where it causes a WARNING to be hit: if (!fs && (request_module("fs-%.*s", len, name) == 0)) { fs = __get_fs_type(name, len); WARN_ONCE(!fs, "request_module fs-%.*s succeeded, but still no fs?\n", len, name); } This is easily reproduced with: echo > /proc/sys/kernel/modprobe mount -t NONEXISTENT none / It causes: request_module fs-NONEXISTENT succeeded, but still no fs? WARNING: CPU: 1 PID: 1106 at fs/filesystems.c:275 get_fs_type+0xd6/0xf0 [...] This should actually use pr_warn_once() rather than WARN_ONCE(), since it's also user-reachable if userspace immediately unloads the module. Regardless, request_module() should correctly return an error when it fails. So let's make it return -ENOENT, which matches the error when the modprobe binary doesn't exist. I've also sent patches to document and test this case. Acked-by: Luis Chamberlain Reviewed-by: Jessica Yu Reviewed-by: Kees Cook Cc: stable@vger.kernel.org Cc: Alexei Starovoitov Cc: Andrew Morton Cc: Greg Kroah-Hartman Cc: Jeff Vander Stoep Cc: NeilBrown Link: https://lore.kernel.org/r/20200318230515.171692-2-ebiggers@kernel.org Bug: 151589316 Change-Id: I5e04f85e12a4f85da23e53bc11da1ade565abcd6 Signed-off-by: Eric Biggers --- kernel/kmod.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/kmod.c b/kernel/kmod.c index bc6addd9152b..a2de58de6ab6 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c @@ -120,7 +120,7 @@ static int call_modprobe(char *module_name, int wait) * invoke it. * * If module auto-loading support is disabled then this function - * becomes a no-operation. + * simply returns -ENOENT. */ int __request_module(bool wait, const char *fmt, ...) { @@ -137,7 +137,7 @@ int __request_module(bool wait, const char *fmt, ...) WARN_ON_ONCE(wait && current_is_async()); if (!modprobe_path[0]) - return 0; + return -ENOENT; va_start(args, fmt); ret = vsnprintf(module_name, MODULE_NAME_LEN, fmt, args); From 4274636cbe4cb33165fa57601de0cc75bb5b41d3 Mon Sep 17 00:00:00 2001 From: Sami Tolvanen Date: Tue, 31 Mar 2020 14:32:27 -0700 Subject: [PATCH 021/136] ANDROID: kbuild: ensure __cfi_check is correctly aligned On modules with no executable code, LLVM generates a __cfi_check stub, but won't align it to page size as expected. This change ensures the function is at the beginning of the .text section and correctly aligned for the CFI shadow. Bug: 148458318 Change-Id: I85ea31fa851bc23988f649b021b3ac7e9d9dcb38 Signed-off-by: Sami Tolvanen --- Makefile | 2 +- scripts/Makefile | 2 ++ scripts/{module-lto.lds => module-lto.lds.S} | 14 +++++++++++++- 3 files changed, 16 insertions(+), 2 deletions(-) rename scripts/{module-lto.lds => module-lto.lds.S} (68%) diff --git a/Makefile b/Makefile index a35b848a075f..48aa90c5e6b7 100644 --- a/Makefile +++ b/Makefile @@ -880,7 +880,7 @@ LD_FLAGS_LTO_CLANG := -mllvm -import-instr-limit=5 KBUILD_LDFLAGS += $(LD_FLAGS_LTO_CLANG) KBUILD_LDFLAGS_MODULE += $(LD_FLAGS_LTO_CLANG) -KBUILD_LDS_MODULE += $(srctree)/scripts/module-lto.lds +KBUILD_LDS_MODULE += scripts/module-lto.lds endif ifdef CONFIG_LTO diff --git a/scripts/Makefile b/scripts/Makefile index 3e86b300f5a1..543603e3a789 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -31,6 +31,8 @@ always := $(hostprogs-y) $(hostprogs-m) # The following hostprogs-y programs are only build on demand hostprogs-y += unifdef +extra-$(CONFIG_LTO_CLANG) += module-lto.lds + subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins subdir-$(CONFIG_MODVERSIONS) += genksyms subdir-$(CONFIG_SECURITY_SELINUX) += selinux diff --git a/scripts/module-lto.lds b/scripts/module-lto.lds.S similarity index 68% rename from scripts/module-lto.lds rename to scripts/module-lto.lds.S index 5ba0e9461e13..c0f4fdeb84a0 100644 --- a/scripts/module-lto.lds +++ b/scripts/module-lto.lds.S @@ -1,3 +1,6 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#include + /* * With CONFIG_LTO_CLANG, LLD always enables -fdata-sections and * -ffunction-sections, which increases the size of the final module. @@ -18,5 +21,14 @@ SECTIONS { .rela.rodata : { *(.rela.rodata .rela.rodata.[0-9a-zA-Z_]*) } .rela.text : { *(.rela.text .rela.text.[0-9a-zA-Z_]*) } .rodata : { *(.rodata .rodata.[0-9a-zA-Z_]*) } - .text : { *(.text .text.[0-9a-zA-Z_]*) } + + /* + * With CFI_CLANG, ensure __cfi_check is at the beginning of the + * .text section, and that the section is aligned to page size. + */ + .text : ALIGN(PAGE_SIZE) { + *(.text.__cfi_check) + *(.text .text.[0-9a-zA-Z_]* .text..L.cfi*) + } + } From fc78ab971efee44fa87d77d62e5879a6d447fe54 Mon Sep 17 00:00:00 2001 From: Todd Kjos Date: Mon, 6 Apr 2020 12:02:20 -0700 Subject: [PATCH 022/136] ANDROID: GKI: defconfig: modify debug configs Turn on CONFIG_PANIC_ON_OOPS and CONFIG_BUG_ON_DATA_CORRUPTION and change panic timeout to -1 (immediately). CONFIG_DEBUG_LIST is now selected via dependancy instead of explicitly. Bug: 152470236 Signed-off-by: Todd Kjos Change-Id: Ideceaa13139ad2408f56fe888a438bc20c5707a2 --- arch/arm64/configs/gki_defconfig | 5 +++-- arch/x86/configs/gki_defconfig | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig index d22c12cc4a28..55f137b639d7 100644 --- a/arch/arm64/configs/gki_defconfig +++ b/arch/arm64/configs/gki_defconfig @@ -501,9 +501,10 @@ CONFIG_DEBUG_STACK_USAGE=y CONFIG_DEBUG_MEMORY_INIT=y CONFIG_SOFTLOCKUP_DETECTOR=y # CONFIG_DETECT_HUNG_TASK is not set -CONFIG_PANIC_TIMEOUT=5 +CONFIG_PANIC_ON_OOPS=y +CONFIG_PANIC_TIMEOUT=-1 CONFIG_SCHEDSTATS=y # CONFIG_DEBUG_PREEMPT is not set -CONFIG_DEBUG_LIST=y +CONFIG_BUG_ON_DATA_CORRUPTION=y CONFIG_CORESIGHT=y CONFIG_CORESIGHT_STM=y diff --git a/arch/x86/configs/gki_defconfig b/arch/x86/configs/gki_defconfig index 1c21961dc514..7f5acbbf98fd 100644 --- a/arch/x86/configs/gki_defconfig +++ b/arch/x86/configs/gki_defconfig @@ -437,6 +437,7 @@ CONFIG_DEBUG_STACK_USAGE=y CONFIG_DEBUG_MEMORY_INIT=y CONFIG_SOFTLOCKUP_DETECTOR=y # CONFIG_DETECT_HUNG_TASK is not set +CONFIG_PANIC_ON_OOPS=y CONFIG_PANIC_TIMEOUT=5 CONFIG_SCHEDSTATS=y -CONFIG_DEBUG_LIST=y +CONFIG_BUG_ON_DATA_CORRUPTION=y From 6e8182d6c570e1f4c94fc4f198a072239eeaf92b Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Fri, 3 Apr 2020 12:06:10 -0700 Subject: [PATCH 023/136] ANDROID: block: make blk_crypto_start_using_mode() properly check for support If blk-crypto-fallback is needed but is disabled by kconfig, make blk_crypto_start_using_mode() return an error rather than succeeding. Use ENOPKG, which matches the error code used by fscrypt when crypto API support is missing with fs-layer encryption. Also, if blk-crypto-fallback is needed but the algorithm is missing from the kernel's crypto API, change the error code from ENOENT to ENOPKG. This is needed for VtsKernelEncryptionTest to pass on some devices. Bug: 137270441 Bug: 151100202 Test: 'atest vts_kernel_encryption_test' on Pixel 4 with the inline crypto patches backported, and also on Cuttlefish. Change-Id: Iedf00ca8e48c74a5d4c40b12712f38738a04ef11 Signed-off-by: Eric Biggers --- block/blk-crypto-fallback.c | 36 +++++++++++------------------------- block/blk-crypto-internal.h | 9 +++++++++ block/blk-crypto.c | 25 +++++++++++++++++++++++++ include/linux/blk-crypto.h | 16 ++++------------ 4 files changed, 49 insertions(+), 37 deletions(-) diff --git a/block/blk-crypto-fallback.c b/block/blk-crypto-fallback.c index 8114eb4da6f3..f3f5e2866b8b 100644 --- a/block/blk-crypto-fallback.c +++ b/block/blk-crypto-fallback.c @@ -488,21 +488,13 @@ bool blk_crypto_queue_decrypt_bio(struct bio *bio) return false; } -/** - * blk_crypto_start_using_mode() - Start using a crypto algorithm on a device - * @mode_num: the blk_crypto_mode we want to allocate ciphers for. - * @data_unit_size: the data unit size that will be used - * @q: the request queue for the device - * - * Upper layers must call this function to ensure that a the crypto API fallback - * has transforms for this algorithm, if they become necessary. - * - * Return: 0 on success and -err on error. +/* + * Prepare blk-crypto-fallback for the specified crypto mode. + * Returns -ENOPKG if the needed crypto API support is missing. */ -int blk_crypto_start_using_mode(enum blk_crypto_mode_num mode_num, - unsigned int data_unit_size, - struct request_queue *q) +int blk_crypto_fallback_start_using_mode(enum blk_crypto_mode_num mode_num) { + const char *cipher_str = blk_crypto_modes[mode_num].cipher_str; struct blk_crypto_keyslot *slotp; unsigned int i; int err = 0; @@ -515,25 +507,20 @@ int blk_crypto_start_using_mode(enum blk_crypto_mode_num mode_num, if (likely(smp_load_acquire(&tfms_inited[mode_num]))) return 0; - /* - * If the keyslot manager of the request queue supports this - * crypto mode, then we don't need to allocate this mode. - */ - if (keyslot_manager_crypto_mode_supported(q->ksm, mode_num, - data_unit_size)) - return 0; - mutex_lock(&tfms_init_lock); if (likely(tfms_inited[mode_num])) goto out; for (i = 0; i < blk_crypto_num_keyslots; i++) { slotp = &blk_crypto_keyslots[i]; - slotp->tfms[mode_num] = crypto_alloc_skcipher( - blk_crypto_modes[mode_num].cipher_str, - 0, 0); + slotp->tfms[mode_num] = crypto_alloc_skcipher(cipher_str, 0, 0); if (IS_ERR(slotp->tfms[mode_num])) { err = PTR_ERR(slotp->tfms[mode_num]); + if (err == -ENOENT) { + pr_warn_once("Missing crypto API support for \"%s\"\n", + cipher_str); + err = -ENOPKG; + } slotp->tfms[mode_num] = NULL; goto out_free_tfms; } @@ -559,7 +546,6 @@ int blk_crypto_start_using_mode(enum blk_crypto_mode_num mode_num, mutex_unlock(&tfms_init_lock); return err; } -EXPORT_SYMBOL_GPL(blk_crypto_start_using_mode); int blk_crypto_fallback_evict_key(const struct blk_crypto_key *key) { diff --git a/block/blk-crypto-internal.h b/block/blk-crypto-internal.h index 40d826b743da..4da998c803f2 100644 --- a/block/blk-crypto-internal.h +++ b/block/blk-crypto-internal.h @@ -19,6 +19,8 @@ extern const struct blk_crypto_mode blk_crypto_modes[]; #ifdef CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK +int blk_crypto_fallback_start_using_mode(enum blk_crypto_mode_num mode_num); + int blk_crypto_fallback_submit_bio(struct bio **bio_ptr); bool blk_crypto_queue_decrypt_bio(struct bio *bio); @@ -29,6 +31,13 @@ bool bio_crypt_fallback_crypted(const struct bio_crypt_ctx *bc); #else /* CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK */ +static inline int +blk_crypto_fallback_start_using_mode(enum blk_crypto_mode_num mode_num) +{ + pr_warn_once("crypto API fallback is disabled\n"); + return -ENOPKG; +} + static inline bool bio_crypt_fallback_crypted(const struct bio_crypt_ctx *bc) { return false; diff --git a/block/blk-crypto.c b/block/blk-crypto.c index 88df1c0e7e5f..7bf2ff86d277 100644 --- a/block/blk-crypto.c +++ b/block/blk-crypto.c @@ -232,6 +232,31 @@ int blk_crypto_init_key(struct blk_crypto_key *blk_key, } EXPORT_SYMBOL_GPL(blk_crypto_init_key); +/** + * blk_crypto_start_using_mode() - Start using blk-crypto on a device + * @crypto_mode: the crypto mode that will be used + * @data_unit_size: the data unit size that will be used + * @q: the request queue for the device + * + * Upper layers must call this function to ensure that either the hardware + * supports the needed crypto settings, or the crypto API fallback has + * transforms for the needed mode allocated and ready to go. + * + * Return: 0 on success; -ENOPKG if the hardware doesn't support the crypto + * settings and blk-crypto-fallback is either disabled or the needed + * algorithm is disabled in the crypto API; or another -errno code. + */ +int blk_crypto_start_using_mode(enum blk_crypto_mode_num crypto_mode, + unsigned int data_unit_size, + struct request_queue *q) +{ + if (keyslot_manager_crypto_mode_supported(q->ksm, crypto_mode, + data_unit_size)) + return 0; + return blk_crypto_fallback_start_using_mode(crypto_mode); +} +EXPORT_SYMBOL_GPL(blk_crypto_start_using_mode); + /** * blk_crypto_evict_key() - Evict a key from any inline encryption hardware * it may have been programmed into diff --git a/include/linux/blk-crypto.h b/include/linux/blk-crypto.h index 2d871a7a0f5a..2416a0a6e6b3 100644 --- a/include/linux/blk-crypto.h +++ b/include/linux/blk-crypto.h @@ -20,6 +20,10 @@ int blk_crypto_init_key(struct blk_crypto_key *blk_key, enum blk_crypto_mode_num crypto_mode, unsigned int data_unit_size); +int blk_crypto_start_using_mode(enum blk_crypto_mode_num crypto_mode, + unsigned int data_unit_size, + struct request_queue *q); + int blk_crypto_evict_key(struct request_queue *q, const struct blk_crypto_key *key); @@ -39,22 +43,10 @@ static inline bool blk_crypto_endio(struct bio *bio) #ifdef CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK -int blk_crypto_start_using_mode(enum blk_crypto_mode_num mode_num, - unsigned int data_unit_size, - struct request_queue *q); - int blk_crypto_fallback_init(void); #else /* CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK */ -static inline int -blk_crypto_start_using_mode(enum blk_crypto_mode_num mode_num, - unsigned int data_unit_size, - struct request_queue *q) -{ - return 0; -} - static inline int blk_crypto_fallback_init(void) { return 0; From 0367acdde361d55117c19be59b27948ddf74fa31 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Fri, 3 Apr 2020 12:06:11 -0700 Subject: [PATCH 024/136] ANDROID: block: require drivers to declare supported crypto key type(s) We need a way to tell which type of keys the inline crypto hardware supports (standard, wrapped, or both), so that fallbacks can be used when needed (either blk-crypto-fallback, or fscrypt fs-layer crypto). We can't simply assume that keyslot_mgmt_ll_ops::derive_raw_secret == NULL means only standard keys are supported and that keyslot_mgmt_ll_ops::derive_raw_secret != NULL means that only wrapped keys are supported, because device-mapper devices always implement this method. Also, hardware might support both types of keys. Therefore, add a field keyslot_manager::features which contains a bitmask of flags which indicate the supported types of keys. Drivers will need to fill this in. This patch makes the UFS standard crypto code set BLK_CRYPTO_FEATURE_STANDARD_KEYS, but UFS variant drivers may need to set BLK_CRYPTO_FEATURE_WRAPPED_KEYS instead. Then, make keyslot_manager_crypto_mode_supported() take the key type into account. Bug: 137270441 Bug: 151100202 Test: 'atest vts_kernel_encryption_test' on Pixel 4 with the inline crypto patches backported, and also on Cuttlefish. Change-Id: Ied846c2767c1fd2f438792dcfd3649157e68b005 Signed-off-by: Eric Biggers --- block/blk-crypto-fallback.c | 8 +++++--- block/blk-crypto.c | 15 ++++++++++++--- block/keyslot-manager.c | 30 ++++++++++++++++++++++++------ drivers/md/dm-default-key.c | 1 + drivers/md/dm.c | 9 +++++++-- drivers/scsi/ufs/ufshcd-crypto.c | 4 +++- fs/crypto/inline_crypt.c | 1 + include/linux/blk-crypto.h | 1 + include/linux/keyslot-manager.h | 14 +++++++++++++- 9 files changed, 67 insertions(+), 16 deletions(-) diff --git a/block/blk-crypto-fallback.c b/block/blk-crypto-fallback.c index f3f5e2866b8b..d6c57887d770 100644 --- a/block/blk-crypto-fallback.c +++ b/block/blk-crypto-fallback.c @@ -601,9 +601,11 @@ int __init blk_crypto_fallback_init(void) crypto_mode_supported[i] = 0xFFFFFFFF; crypto_mode_supported[BLK_ENCRYPTION_MODE_INVALID] = 0; - blk_crypto_ksm = keyslot_manager_create(NULL, blk_crypto_num_keyslots, - &blk_crypto_ksm_ll_ops, - crypto_mode_supported, NULL); + blk_crypto_ksm = keyslot_manager_create( + NULL, blk_crypto_num_keyslots, + &blk_crypto_ksm_ll_ops, + BLK_CRYPTO_FEATURE_STANDARD_KEYS, + crypto_mode_supported, NULL); if (!blk_crypto_ksm) return -ENOMEM; diff --git a/block/blk-crypto.c b/block/blk-crypto.c index 7bf2ff86d277..f56bbec1132f 100644 --- a/block/blk-crypto.c +++ b/block/blk-crypto.c @@ -109,7 +109,8 @@ int blk_crypto_submit_bio(struct bio **bio_ptr) /* Get device keyslot if supported */ if (keyslot_manager_crypto_mode_supported(q->ksm, bc->bc_key->crypto_mode, - bc->bc_key->data_unit_size)) { + bc->bc_key->data_unit_size, + bc->bc_key->is_hw_wrapped)) { err = bio_crypt_ctx_acquire_keyslot(bc, q->ksm); if (!err) return 0; @@ -236,6 +237,7 @@ EXPORT_SYMBOL_GPL(blk_crypto_init_key); * blk_crypto_start_using_mode() - Start using blk-crypto on a device * @crypto_mode: the crypto mode that will be used * @data_unit_size: the data unit size that will be used + * @is_hw_wrapped_key: whether the key will be hardware-wrapped * @q: the request queue for the device * * Upper layers must call this function to ensure that either the hardware @@ -248,11 +250,17 @@ EXPORT_SYMBOL_GPL(blk_crypto_init_key); */ int blk_crypto_start_using_mode(enum blk_crypto_mode_num crypto_mode, unsigned int data_unit_size, + bool is_hw_wrapped_key, struct request_queue *q) { if (keyslot_manager_crypto_mode_supported(q->ksm, crypto_mode, - data_unit_size)) + data_unit_size, + is_hw_wrapped_key)) return 0; + if (is_hw_wrapped_key) { + pr_warn_once("hardware doesn't support wrapped keys\n"); + return -EOPNOTSUPP; + } return blk_crypto_fallback_start_using_mode(crypto_mode); } EXPORT_SYMBOL_GPL(blk_crypto_start_using_mode); @@ -277,7 +285,8 @@ int blk_crypto_evict_key(struct request_queue *q, { if (q->ksm && keyslot_manager_crypto_mode_supported(q->ksm, key->crypto_mode, - key->data_unit_size)) + key->data_unit_size, + key->is_hw_wrapped)) return keyslot_manager_evict_key(q->ksm, key); return blk_crypto_fallback_evict_key(key); diff --git a/block/keyslot-manager.c b/block/keyslot-manager.c index 6b563c8602d0..d1dbac6e1a46 100644 --- a/block/keyslot-manager.c +++ b/block/keyslot-manager.c @@ -43,6 +43,7 @@ struct keyslot { struct keyslot_manager { unsigned int num_slots; struct keyslot_mgmt_ll_ops ksm_ll_ops; + unsigned int features; unsigned int crypto_mode_supported[BLK_ENCRYPTION_MODE_MAX]; void *ll_priv_data; @@ -135,6 +136,8 @@ static inline void keyslot_manager_hw_exit(struct keyslot_manager *ksm) * @ksm_ll_ops: The struct keyslot_mgmt_ll_ops for the device that this keyslot * manager will use to perform operations like programming and * evicting keys. + * @features: The supported features as a bitmask of BLK_CRYPTO_FEATURE_* flags. + * Most drivers should set BLK_CRYPTO_FEATURE_STANDARD_KEYS here. * @crypto_mode_supported: Array of size BLK_ENCRYPTION_MODE_MAX of * bitmasks that represents whether a crypto mode * and data unit size are supported. The i'th bit @@ -154,6 +157,7 @@ struct keyslot_manager *keyslot_manager_create( struct device *dev, unsigned int num_slots, const struct keyslot_mgmt_ll_ops *ksm_ll_ops, + unsigned int features, const unsigned int crypto_mode_supported[BLK_ENCRYPTION_MODE_MAX], void *ll_priv_data) { @@ -175,6 +179,7 @@ struct keyslot_manager *keyslot_manager_create( ksm->num_slots = num_slots; ksm->ksm_ll_ops = *ksm_ll_ops; + ksm->features = features; memcpy(ksm->crypto_mode_supported, crypto_mode_supported, sizeof(ksm->crypto_mode_supported)); ksm->ll_priv_data = ll_priv_data; @@ -381,23 +386,24 @@ void keyslot_manager_put_slot(struct keyslot_manager *ksm, unsigned int slot) } /** - * keyslot_manager_crypto_mode_supported() - Find out if a crypto_mode/data - * unit size combination is supported - * by a ksm. + * keyslot_manager_crypto_mode_supported() - Find out if a crypto_mode / + * data unit size / is_hw_wrapped_key + * combination is supported by a ksm. * @ksm: The keyslot manager to check * @crypto_mode: The crypto mode to check for. * @data_unit_size: The data_unit_size for the mode. + * @is_hw_wrapped_key: Whether a hardware-wrapped key will be used. * * Calls and returns the result of the crypto_mode_supported function specified * by the ksm. * * Context: Process context. - * Return: Whether or not this ksm supports the specified crypto_mode/ - * data_unit_size combo. + * Return: Whether or not this ksm supports the specified crypto settings. */ bool keyslot_manager_crypto_mode_supported(struct keyslot_manager *ksm, enum blk_crypto_mode_num crypto_mode, - unsigned int data_unit_size) + unsigned int data_unit_size, + bool is_hw_wrapped_key) { if (!ksm) return false; @@ -405,6 +411,13 @@ bool keyslot_manager_crypto_mode_supported(struct keyslot_manager *ksm, return false; if (WARN_ON(!is_power_of_2(data_unit_size))) return false; + if (is_hw_wrapped_key) { + if (!(ksm->features & BLK_CRYPTO_FEATURE_WRAPPED_KEYS)) + return false; + } else { + if (!(ksm->features & BLK_CRYPTO_FEATURE_STANDARD_KEYS)) + return false; + } return ksm->crypto_mode_supported[crypto_mode] & data_unit_size; } @@ -520,6 +533,7 @@ EXPORT_SYMBOL_GPL(keyslot_manager_destroy); * keyslot_manager_create_passthrough() - Create a passthrough keyslot manager * @dev: Device for runtime power management (NULL if none) * @ksm_ll_ops: The struct keyslot_mgmt_ll_ops + * @features: Bitmask of BLK_CRYPTO_FEATURE_* flags * @crypto_mode_supported: Bitmasks for supported encryption modes * @ll_priv_data: Private data passed as is to the functions in ksm_ll_ops. * @@ -537,6 +551,7 @@ EXPORT_SYMBOL_GPL(keyslot_manager_destroy); struct keyslot_manager *keyslot_manager_create_passthrough( struct device *dev, const struct keyslot_mgmt_ll_ops *ksm_ll_ops, + unsigned int features, const unsigned int crypto_mode_supported[BLK_ENCRYPTION_MODE_MAX], void *ll_priv_data) { @@ -547,6 +562,7 @@ struct keyslot_manager *keyslot_manager_create_passthrough( return NULL; ksm->ksm_ll_ops = *ksm_ll_ops; + ksm->features = features; memcpy(ksm->crypto_mode_supported, crypto_mode_supported, sizeof(ksm->crypto_mode_supported)); ksm->ll_priv_data = ll_priv_data; @@ -575,11 +591,13 @@ void keyslot_manager_intersect_modes(struct keyslot_manager *parent, if (child) { unsigned int i; + parent->features &= child->features; for (i = 0; i < ARRAY_SIZE(child->crypto_mode_supported); i++) { parent->crypto_mode_supported[i] &= child->crypto_mode_supported[i]; } } else { + parent->features = 0; memset(parent->crypto_mode_supported, 0, sizeof(parent->crypto_mode_supported)); } diff --git a/drivers/md/dm-default-key.c b/drivers/md/dm-default-key.c index 2420e9898d09..73120426a1a0 100644 --- a/drivers/md/dm-default-key.c +++ b/drivers/md/dm-default-key.c @@ -239,6 +239,7 @@ static int default_key_ctr(struct dm_target *ti, unsigned int argc, char **argv) } err = blk_crypto_start_using_mode(cipher->mode_num, dkc->sector_size, + dkc->is_hw_wrapped, dkc->dev->bdev->bd_queue); if (err) { ti->error = "Error starting to use blk-crypto"; diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 502de5255d3b..94de9a99d475 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -2370,16 +2370,21 @@ static struct keyslot_mgmt_ll_ops dm_ksm_ll_ops = { static int dm_init_inline_encryption(struct mapped_device *md) { + unsigned int features; unsigned int mode_masks[BLK_ENCRYPTION_MODE_MAX]; /* - * Start out with all crypto mode support bits set. Any unsupported - * bits will be cleared later when calculating the device restrictions. + * Initially declare support for all crypto settings. Anything + * unsupported by a child device will be removed later when calculating + * the device restrictions. */ + features = BLK_CRYPTO_FEATURE_STANDARD_KEYS | + BLK_CRYPTO_FEATURE_WRAPPED_KEYS; memset(mode_masks, 0xFF, sizeof(mode_masks)); md->queue->ksm = keyslot_manager_create_passthrough(NULL, &dm_ksm_ll_ops, + features, mode_masks, md); if (!md->queue->ksm) return -ENOMEM; diff --git a/drivers/scsi/ufs/ufshcd-crypto.c b/drivers/scsi/ufs/ufshcd-crypto.c index 6999970235b3..d62ab7a9faff 100644 --- a/drivers/scsi/ufs/ufshcd-crypto.c +++ b/drivers/scsi/ufs/ufshcd-crypto.c @@ -336,7 +336,9 @@ int ufshcd_hba_init_crypto_spec(struct ufs_hba *hba, ufshcd_clear_all_keyslots(hba); hba->ksm = keyslot_manager_create(hba->dev, ufshcd_num_keyslots(hba), - ksm_ops, crypto_modes_supported, hba); + ksm_ops, + BLK_CRYPTO_FEATURE_STANDARD_KEYS, + crypto_modes_supported, hba); if (!hba->ksm) { err = -ENOMEM; diff --git a/fs/crypto/inline_crypt.c b/fs/crypto/inline_crypt.c index 00da0effa6c9..298bf57ca781 100644 --- a/fs/crypto/inline_crypt.c +++ b/fs/crypto/inline_crypt.c @@ -103,6 +103,7 @@ int fscrypt_prepare_inline_crypt_key(struct fscrypt_prepared_key *prep_key, queue_refs++; err = blk_crypto_start_using_mode(crypto_mode, sb->s_blocksize, + is_hw_wrapped, blk_key->devs[i]); if (err) { fscrypt_err(inode, diff --git a/include/linux/blk-crypto.h b/include/linux/blk-crypto.h index 2416a0a6e6b3..d383d3b320b9 100644 --- a/include/linux/blk-crypto.h +++ b/include/linux/blk-crypto.h @@ -22,6 +22,7 @@ int blk_crypto_init_key(struct blk_crypto_key *blk_key, int blk_crypto_start_using_mode(enum blk_crypto_mode_num crypto_mode, unsigned int data_unit_size, + bool is_hw_wrapped_key, struct request_queue *q); int blk_crypto_evict_key(struct request_queue *q, diff --git a/include/linux/keyslot-manager.h b/include/linux/keyslot-manager.h index 2f4aac2851bf..cd65bea927db 100644 --- a/include/linux/keyslot-manager.h +++ b/include/linux/keyslot-manager.h @@ -8,6 +8,15 @@ #include +/* Inline crypto feature bits. Must set at least one. */ +enum { + /* Support for standard software-specified keys */ + BLK_CRYPTO_FEATURE_STANDARD_KEYS = BIT(0), + + /* Support for hardware-wrapped keys */ + BLK_CRYPTO_FEATURE_WRAPPED_KEYS = BIT(1), +}; + #ifdef CONFIG_BLK_INLINE_ENCRYPTION struct keyslot_manager; @@ -45,6 +54,7 @@ struct keyslot_manager *keyslot_manager_create( struct device *dev, unsigned int num_slots, const struct keyslot_mgmt_ll_ops *ksm_ops, + unsigned int features, const unsigned int crypto_mode_supported[BLK_ENCRYPTION_MODE_MAX], void *ll_priv_data); @@ -57,7 +67,8 @@ void keyslot_manager_put_slot(struct keyslot_manager *ksm, unsigned int slot); bool keyslot_manager_crypto_mode_supported(struct keyslot_manager *ksm, enum blk_crypto_mode_num crypto_mode, - unsigned int data_unit_size); + unsigned int data_unit_size, + bool is_hw_wrapped_key); int keyslot_manager_evict_key(struct keyslot_manager *ksm, const struct blk_crypto_key *key); @@ -71,6 +82,7 @@ void keyslot_manager_destroy(struct keyslot_manager *ksm); struct keyslot_manager *keyslot_manager_create_passthrough( struct device *dev, const struct keyslot_mgmt_ll_ops *ksm_ops, + unsigned int features, const unsigned int crypto_mode_supported[BLK_ENCRYPTION_MODE_MAX], void *ll_priv_data); From d404a4fdf9fe8b7cad1fdc46cfb944a594a74023 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Fri, 3 Apr 2020 12:06:11 -0700 Subject: [PATCH 025/136] ANDROID: fscrypt: fall back to filesystem-layer crypto when needed When the filesystem is mounted with '-o inlinecrypt', make fscrypt fall back to filesystem-layer crypto when inline crypto won't work, e.g. due to the hardware not supporting the encryption algorithm. When blk-crypto-fallback is disabled, this fixes '-o inlinecrypt' to not break any fscrypt policies that would otherwise work. This is needed for VtsKernelEncryptionTest to pass on some devices. Bug: 137270441 Bug: 151100202 Test: 'atest vts_kernel_encryption_test' on Pixel 4 with the inline crypto patches backported, and also on Cuttlefish. Change-Id: I3e730df4608efb12d7126d1a85faddcccb566764 Signed-off-by: Eric Biggers --- fs/crypto/fscrypt_private.h | 7 ++-- fs/crypto/inline_crypt.c | 70 ++++++++++++++++++++++++++++++------- fs/crypto/keysetup.c | 10 ++++-- 3 files changed, 71 insertions(+), 16 deletions(-) diff --git a/fs/crypto/fscrypt_private.h b/fs/crypto/fscrypt_private.h index e3cff3c6988f..fed1a2148834 100644 --- a/fs/crypto/fscrypt_private.h +++ b/fs/crypto/fscrypt_private.h @@ -326,7 +326,8 @@ extern void fscrypt_destroy_hkdf(struct fscrypt_hkdf *hkdf); /* inline_crypt.c */ #ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT -extern void fscrypt_select_encryption_impl(struct fscrypt_info *ci); +extern int fscrypt_select_encryption_impl(struct fscrypt_info *ci, + bool is_hw_wrapped_key); static inline bool fscrypt_using_inline_encryption(const struct fscrypt_info *ci) @@ -370,8 +371,10 @@ fscrypt_is_key_prepared(struct fscrypt_prepared_key *prep_key, #else /* CONFIG_FS_ENCRYPTION_INLINE_CRYPT */ -static inline void fscrypt_select_encryption_impl(struct fscrypt_info *ci) +static inline int fscrypt_select_encryption_impl(struct fscrypt_info *ci, + bool is_hw_wrapped_key) { + return 0; } static inline bool fscrypt_using_inline_encryption( diff --git a/fs/crypto/inline_crypt.c b/fs/crypto/inline_crypt.c index 298bf57ca781..eaa2014ec84b 100644 --- a/fs/crypto/inline_crypt.c +++ b/fs/crypto/inline_crypt.c @@ -25,26 +25,76 @@ struct fscrypt_blk_crypto_key { struct request_queue *devs[]; }; +static int fscrypt_get_num_devices(struct super_block *sb) +{ + if (sb->s_cop->get_num_devices) + return sb->s_cop->get_num_devices(sb); + return 1; +} + +static void fscrypt_get_devices(struct super_block *sb, int num_devs, + struct request_queue **devs) +{ + if (num_devs == 1) + devs[0] = bdev_get_queue(sb->s_bdev); + else + sb->s_cop->get_devices(sb, devs); +} + /* Enable inline encryption for this file if supported. */ -void fscrypt_select_encryption_impl(struct fscrypt_info *ci) +int fscrypt_select_encryption_impl(struct fscrypt_info *ci, + bool is_hw_wrapped_key) { const struct inode *inode = ci->ci_inode; struct super_block *sb = inode->i_sb; + enum blk_crypto_mode_num crypto_mode = ci->ci_mode->blk_crypto_mode; + struct request_queue **devs; + int num_devs; + int i; /* The file must need contents encryption, not filenames encryption */ if (!S_ISREG(inode->i_mode)) - return; + return 0; /* blk-crypto must implement the needed encryption algorithm */ - if (ci->ci_mode->blk_crypto_mode == BLK_ENCRYPTION_MODE_INVALID) - return; + if (crypto_mode == BLK_ENCRYPTION_MODE_INVALID) + return 0; /* The filesystem must be mounted with -o inlinecrypt */ if (!sb->s_cop->inline_crypt_enabled || !sb->s_cop->inline_crypt_enabled(sb)) - return; + return 0; + + /* + * The needed encryption settings must be supported either by + * blk-crypto-fallback, or by hardware on all the filesystem's devices. + */ + + if (IS_ENABLED(CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK) && + !is_hw_wrapped_key) { + ci->ci_inlinecrypt = true; + return 0; + } + + num_devs = fscrypt_get_num_devices(sb); + devs = kmalloc_array(num_devs, sizeof(*devs), GFP_NOFS); + if (!devs) + return -ENOMEM; + + fscrypt_get_devices(sb, num_devs, devs); + + for (i = 0; i < num_devs; i++) { + if (!keyslot_manager_crypto_mode_supported(devs[i]->ksm, + crypto_mode, + sb->s_blocksize, + is_hw_wrapped_key)) + goto out_free_devs; + } ci->ci_inlinecrypt = true; +out_free_devs: + kfree(devs); + return 0; } int fscrypt_prepare_inline_crypt_key(struct fscrypt_prepared_key *prep_key, @@ -56,14 +106,13 @@ int fscrypt_prepare_inline_crypt_key(struct fscrypt_prepared_key *prep_key, const struct inode *inode = ci->ci_inode; struct super_block *sb = inode->i_sb; enum blk_crypto_mode_num crypto_mode = ci->ci_mode->blk_crypto_mode; - int num_devs = 1; + int num_devs; int queue_refs = 0; struct fscrypt_blk_crypto_key *blk_key; int err; int i; - if (sb->s_cop->get_num_devices) - num_devs = sb->s_cop->get_num_devices(sb); + num_devs = fscrypt_get_num_devices(sb); if (WARN_ON(num_devs < 1)) return -EINVAL; @@ -72,10 +121,7 @@ int fscrypt_prepare_inline_crypt_key(struct fscrypt_prepared_key *prep_key, return -ENOMEM; blk_key->num_devs = num_devs; - if (num_devs == 1) - blk_key->devs[0] = bdev_get_queue(sb->s_bdev); - else - sb->s_cop->get_devices(sb, blk_key->devs); + fscrypt_get_devices(sb, num_devs, blk_key->devs); BUILD_BUG_ON(FSCRYPT_MAX_HW_WRAPPED_KEY_SIZE > BLK_CRYPTO_MAX_WRAPPED_KEY_SIZE); diff --git a/fs/crypto/keysetup.c b/fs/crypto/keysetup.c index 34f95cd6c8eb..09f5d5d2904c 100644 --- a/fs/crypto/keysetup.c +++ b/fs/crypto/keysetup.c @@ -328,8 +328,6 @@ static int setup_file_encryption_key(struct fscrypt_info *ci, struct fscrypt_key_specifier mk_spec; int err; - fscrypt_select_encryption_impl(ci); - switch (ci->ci_policy.version) { case FSCRYPT_POLICY_V1: mk_spec.type = FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR; @@ -354,6 +352,10 @@ static int setup_file_encryption_key(struct fscrypt_info *ci, ci->ci_policy.version != FSCRYPT_POLICY_V1) return PTR_ERR(key); + err = fscrypt_select_encryption_impl(ci, false); + if (err) + return err; + /* * As a legacy fallback for v1 policies, search for the key in * the current task's subscribed keyrings too. Don't move this @@ -388,6 +390,10 @@ static int setup_file_encryption_key(struct fscrypt_info *ci, goto out_release_key; } + err = fscrypt_select_encryption_impl(ci, mk->mk_secret.is_hw_wrapped); + if (err) + goto out_release_key; + switch (ci->ci_policy.version) { case FSCRYPT_POLICY_V1: err = fscrypt_setup_v1_file_key(ci, mk->mk_secret.raw); From 74bd60758036f1f876a41abbe3c70a85c443370e Mon Sep 17 00:00:00 2001 From: Alistair Delva Date: Tue, 7 Apr 2020 11:26:39 -0700 Subject: [PATCH 026/136] ANDROID: GKI: Remove SCHED_AUTOGROUP This feature is undesirable and not required by Android. Bug: 153460450 Change-Id: I548bb44b9fecc90ba2589fb74b4e4693e639a8c9 Signed-off-by: Alistair Delva --- arch/arm64/configs/gki_defconfig | 3 ++- arch/x86/configs/gki_defconfig | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig index 55f137b639d7..9de932925b59 100644 --- a/arch/arm64/configs/gki_defconfig +++ b/arch/arm64/configs/gki_defconfig @@ -11,9 +11,11 @@ CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y CONFIG_IKHEADERS=y CONFIG_UCLAMP_TASK=y +CONFIG_CGROUPS=y CONFIG_MEMCG=y CONFIG_MEMCG_SWAP=y CONFIG_BLK_CGROUP=y +CONFIG_CGROUP_SCHED=y CONFIG_UCLAMP_TASK_GROUP=y CONFIG_CGROUP_FREEZER=y CONFIG_CPUSETS=y @@ -22,7 +24,6 @@ CONFIG_CGROUP_BPF=y CONFIG_NAMESPACES=y # CONFIG_UTS_NS is not set # CONFIG_PID_NS is not set -CONFIG_SCHED_AUTOGROUP=y CONFIG_BLK_DEV_INITRD=y # CONFIG_RD_BZIP2 is not set # CONFIG_RD_LZMA is not set diff --git a/arch/x86/configs/gki_defconfig b/arch/x86/configs/gki_defconfig index 7f5acbbf98fd..1ac36ee4baeb 100644 --- a/arch/x86/configs/gki_defconfig +++ b/arch/x86/configs/gki_defconfig @@ -12,8 +12,10 @@ CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y CONFIG_IKHEADERS=y CONFIG_UCLAMP_TASK=y +CONFIG_CGROUPS=y CONFIG_MEMCG=y CONFIG_MEMCG_SWAP=y +CONFIG_CGROUP_SCHED=y CONFIG_UCLAMP_TASK_GROUP=y CONFIG_CGROUP_FREEZER=y CONFIG_CPUSETS=y @@ -22,7 +24,6 @@ CONFIG_CGROUP_BPF=y CONFIG_NAMESPACES=y # CONFIG_UTS_NS is not set # CONFIG_PID_NS is not set -CONFIG_SCHED_AUTOGROUP=y CONFIG_BLK_DEV_INITRD=y # CONFIG_RD_BZIP2 is not set # CONFIG_RD_LZMA is not set From e93e4b4f936fbabdf5305e6e7457c047944fb3a8 Mon Sep 17 00:00:00 2001 From: Alistair Delva Date: Tue, 7 Apr 2020 16:32:21 -0700 Subject: [PATCH 027/136] ANDROID: GKI: update ABI for SCHED_AUTOGROUP removal Leaf changes summary: 1 artifact changed Changed leaf types summary: 1 leaf type changed Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 0 Added function Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable 'struct signal_struct at signal.h:81:1' changed: type size changed from 8320 to 8256 (in bits) 1 data member deletion: 'autogroup* signal_struct::autogroup', at offset 3264 (in bits) at signal.h:166:1 there are data member changes: 'seqlock_t signal_struct::stats_lock' offset changed from 3328 to 3264 (in bits) (by -64 bits) 'u64 signal_struct::utime' offset changed from 3392 to 3328 (in bits) (by -64 bits) 'u64 signal_struct::stime' offset changed from 3456 to 3392 (in bits) (by -64 bits) 'u64 signal_struct::cutime' offset changed from 3520 to 3456 (in bits) (by -64 bits) 'u64 signal_struct::cstime' offset changed from 3584 to 3520 (in bits) (by -64 bits) 'u64 signal_struct::gtime' offset changed from 3648 to 3584 (in bits) (by -64 bits) 'u64 signal_struct::cgtime' offset changed from 3712 to 3648 (in bits) (by -64 bits) 'prev_cputime signal_struct::prev_cputime' offset changed from 3776 to 3712 (in bits) (by -64 bits) 'unsigned long int signal_struct::nvcsw' offset changed from 3968 to 3904 (in bits) (by -64 bits) 'unsigned long int signal_struct::nivcsw' offset changed from 4032 to 3968 (in bits) (by -64 bits) 'unsigned long int signal_struct::cnvcsw' offset changed from 4096 to 4032 (in bits) (by -64 bits) 'unsigned long int signal_struct::cnivcsw' offset changed from 4160 to 4096 (in bits) (by -64 bits) 'unsigned long int signal_struct::min_flt' offset changed from 4224 to 4160 (in bits) (by -64 bits) 'unsigned long int signal_struct::maj_flt' offset changed from 4288 to 4224 (in bits) (by -64 bits) 'unsigned long int signal_struct::cmin_flt' offset changed from 4352 to 4288 (in bits) (by -64 bits) 'unsigned long int signal_struct::cmaj_flt' offset changed from 4416 to 4352 (in bits) (by -64 bits) 'unsigned long int signal_struct::inblock' offset changed from 4480 to 4416 (in bits) (by -64 bits) 'unsigned long int signal_struct::oublock' offset changed from 4544 to 4480 (in bits) (by -64 bits) 'unsigned long int signal_struct::cinblock' offset changed from 4608 to 4544 (in bits) (by -64 bits) 'unsigned long int signal_struct::coublock' offset changed from 4672 to 4608 (in bits) (by -64 bits) 'unsigned long int signal_struct::maxrss' offset changed from 4736 to 4672 (in bits) (by -64 bits) 'unsigned long int signal_struct::cmaxrss' offset changed from 4800 to 4736 (in bits) (by -64 bits) 'task_io_accounting signal_struct::ioac' offset changed from 4864 to 4800 (in bits) (by -64 bits) 'long long unsigned int signal_struct::sum_sched_runtime' offset changed from 5376 to 5312 (in bits) (by -64 bits) 'rlimit signal_struct::rlim[16]' offset changed from 5440 to 5376 (in bits) (by -64 bits) 'taskstats* signal_struct::stats' offset changed from 7488 to 7424 (in bits) (by -64 bits) 'unsigned int signal_struct::audit_tty' offset changed from 7552 to 7488 (in bits) (by -64 bits) 'tty_audit_buf* signal_struct::tty_audit_buf' offset changed from 7616 to 7552 (in bits) (by -64 bits) 'bool signal_struct::oom_flag_origin' offset changed from 7680 to 7616 (in bits) (by -64 bits) 'short int signal_struct::oom_score_adj' offset changed from 7696 to 7632 (in bits) (by -64 bits) 'short int signal_struct::oom_score_adj_min' offset changed from 7712 to 7648 (in bits) (by -64 bits) 'mm_struct* signal_struct::oom_mm' offset changed from 7744 to 7680 (in bits) (by -64 bits) 'mutex signal_struct::cred_guard_mutex' offset changed from 7808 to 7744 (in bits) (by -64 bits) 'u64 signal_struct::android_kabi_reserved1' offset changed from 8064 to 8000 (in bits) (by -64 bits) 'u64 signal_struct::android_kabi_reserved2' offset changed from 8128 to 8064 (in bits) (by -64 bits) 'u64 signal_struct::android_kabi_reserved3' offset changed from 8192 to 8128 (in bits) (by -64 bits) 'u64 signal_struct::android_kabi_reserved4' offset changed from 8256 to 8192 (in bits) (by -64 bits) 2350 impacted interfaces Bug: 153460450 Change-Id: Ib411e02301284dc89f602ed3268b4509353afb13 Signed-off-by: Alistair Delva --- abi_gki_aarch64.xml | 86908 +++++++++++++++++++++--------------------- 1 file changed, 43505 insertions(+), 43403 deletions(-) diff --git a/abi_gki_aarch64.xml b/abi_gki_aarch64.xml index 3d2ce3713262..c820733427a7 100644 --- a/abi_gki_aarch64.xml +++ b/abi_gki_aarch64.xml @@ -3526,417 +3526,416 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - - + + - + - + - - - - + + + + - - + + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3945,85 +3944,85 @@ - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4032,51 +4031,51 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4086,9 +4085,9 @@ - + - + @@ -4096,28 +4095,28 @@ - + - + - + - + - + - + - + @@ -4225,7 +4224,7 @@ - + @@ -4237,501 +4236,512 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - + - + - + + + + - + - + - + - + - - - + + + + + + + + + - + - + + + + - - - + + + - + + + + + + + + + + + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + @@ -4748,439 +4758,439 @@ - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5189,160 +5199,160 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5362,150 +5372,150 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5517,364 +5527,364 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - - + + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + @@ -5882,117 +5892,117 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + @@ -6000,233 +6010,233 @@ - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + @@ -6235,118 +6245,118 @@ - + - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6361,13 +6371,13 @@ - + - + - + @@ -6375,18 +6385,18 @@ - - + + - - - + + + - + @@ -6395,62 +6405,62 @@ - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6459,394 +6469,394 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - - + + + - + - - + + - + - - - + + + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6867,91 +6877,91 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6966,280 +6976,280 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7248,49 +7258,49 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7299,683 +7309,683 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - + - - - - + + + + - + @@ -7984,87 +7994,87 @@ - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -8073,421 +8083,421 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -8496,365 +8506,362 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + + + + + + + - - - - - - - + - + - - + + - + - + - - - - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -8865,124 +8872,124 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + @@ -8990,35 +8997,35 @@ - + - + - + - + - + - - + + - + - - + + - + @@ -9027,174 +9034,174 @@ - + - + - + - + - + - + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -9208,8 +9215,8 @@ - - + + @@ -9220,300 +9227,300 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -9522,265 +9529,265 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -9788,437 +9795,437 @@ - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -10226,398 +10233,398 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + @@ -10625,51 +10632,51 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -10680,19 +10687,19 @@ - + - + - + - + - - + + @@ -10700,18 +10707,18 @@ - + - + - + - + - + @@ -10720,155 +10727,155 @@ - - + + - + - + - + - + - + - + - - - - - - + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -10877,1828 +10884,1827 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - + + + + - - - + + + - - + + - - - - - + + + + + + + + + + - - - + + - - - + + + - - - + + + - - - + + + + + + + + + + + - - - + + + + - - + + - - - - - - - - - + - - + - - - + + + - - - + + + + + + - - + + + + - + + + + - - + + - - - - + + + + - - + + - - - - + + - - + - - + + - + + + + - - + + + + - - - - + + - - - - + + + - - + + - - - + - - + + + - + + + + + - - - + + + - - - - - + - - - - - - - - - - - + + + + + + + + + + + + - - + + - - - + + - - + + + + + + - - + - - - - - - + + + + - + + + + + + + - - - - + + + + + + + - - - - - - - + + - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + - - + + + - - + - - - + - + + - + + + - - + + + + + - - - + + + + + - - - - - + + + - - - - - + + + + - - - + + + + - - - - + + + + - - - - + + - - - - + + - - + + - + + - - + + - - + + - - + + - - - - + + + - + - - - + + + - + + + - - - + - - - + + - + + + + - + - - - - - - - - - + + - - + + + - - - + + + + + - + + - + + + - - + + - - - + + - - + + - - + + + - - + + - - - + + - - + + - - - - - - - + - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + - - - + + + + + - - - - - + - - - + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - + + - - - - - - - - + + + - - - + + + - - - - - - - + + - + - - - + + + + + + + + + + + + + - - - + - - - + + - + + + - - + + + - - - + + - - - + - - + + + + + + + - + + + + - - - - - - - + + + - - - - + + + + - - - + + + + + - - - - + + + + + - + + + - - - + + + - - - - - + + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + + - - - - - - - + + + + + - - - - - - - + + + - + + - - - + - - - + + + + + - - + + - + - - - - - + + + + + - - - - + + + + + + - - - - - - - - - - - - - - - - + - - - + + + + + + + + + + + + + + + + + - - - - - + + + - - - - + + - - - - - - - - + + + - - - + + + + + + + + - - + + + + + + - - - - + + + - - - - - - + + - - - + + - - - + + - - + + - - + + + + - - + + - - - + + + - - + + - - - + + - - + + + + - - + + - - - - + + + - - + + - - - + + - - + + - - + + - - + + + - - + + + - - - + + - - - + + + + + + + - - + + - - - - - - - + + + + - - + + - - - - + + + + - - + + - - - - + + + - - + + - - - + + + + - - + + + + + + + + - - - - + + + - - - - - - - - + + + - - - + + + - - - + + + - - - + + - - - + + - - + + - - + + - - + + + + - - + + - - - - + + + + - - + + - - - - + + + - - + + + - - - + + - - - + - - + + - + + + - - + + + + - - - + + - - - - + + - - - - - - - - - + @@ -12712,7 +12718,7 @@ - + @@ -12726,264 +12732,253 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + - + - - - - - - - - - + - - + + - + - - + + @@ -12994,335 +12989,335 @@ - - + + - - - - + + + + - - - - - - + + + + + + - + - + - - - + + + - - + + - - + + - + - + - + - + - - + + - - + + - - + + - - - - + + + + - - - - + + + + - + - - + + - + - - - + + + - + - + - + - + - + - + - - - + + + - - + + - - + + - - - + + + - + - - + + - - - - - - + + + + + + - - + + - - + + - - + + - - - + + + - - + + - + - - + + - - - - + + + + - - + + - - + + - + - - + + - - - + + + - - - + + + - + - - - - + + + + - - - + + + - - + + - - + + - - - - + + + + - - + + - - - - + + + + - - - + + + - - + + - - - + + + - + - - - + + + - + - + - - - - + + + + - + - - - - - - + + + + + + - + - + @@ -13331,7 +13326,7 @@ - + @@ -13340,139 +13335,139 @@ - - - + + + - + - - - - - + + + + + - - - - - - + + + + + + - - - - - + + + + + - + - - - + + + - - - + + + - + - + - - + + - - + + - - - - + + + + - - + + - - + + - - - - - + + + + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -13480,637 +13475,637 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + - - - - - - - + + - - - + + + - - + + - + + + + + + + + + + + + + + + - + + + + - - - - - - - - - - - - - - + + - - - + + + + + + - - + + - - - + + + - - - + + + + - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + - + - + - + - + - - + + - + - - + + - - + + - - - - - + + + + + - - - + + + - - + + - + - - + + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - + + - + - + - + - + - - + + - + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - + - - - + + + - - + + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - - - - - - - + + + + + + + + - - + + - - + + - - + + - - + + + + + + + + + + + - - + + + - - - - - - - - - - - - - - + + + + + - - + - + - - - + + + - + - + - - - - - - - + + + + + + + - - - + + + - + - + - - - + + + - - - - - + + + + + - + - + - - + + - + - + - - + + - + - - + + - + - + - + @@ -14119,790 +14114,790 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - + + + + + + - - - - - - + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + - - + + - - + + - - - + + + - - + + - - - - + + + + - - + + - - - - + + + + - - + + - - - - - + + + + + + + + + - - - - - - + + - + - - - - - - - - - - - - + + + + - - + + - - - - + + + - - - - - + + + - - - + + + + - - - + + + + + + + + + + + + + - - + + - + - + - + - + - + - + - + - - - - + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - - - + + + - - + + - + - - - - - + + + + + - + - - + + - + - - + + - + - + - + - - + + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -14911,7 +14906,7 @@ - + @@ -14923,648 +14918,659 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - - - - - - - - - - - - + - + - + + + + - + - + + + + - + - + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + @@ -15573,7 +15579,7 @@ - + @@ -15582,161 +15588,161 @@ - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - - + + - + - - + + - + - - + + - + - + - + - - + + - + - + - + - + - + @@ -15810,12 +15816,12 @@ - + - + @@ -15842,10 +15848,10 @@ - + - + @@ -15871,16 +15877,16 @@ - + - + - + - - + + @@ -15896,21 +15902,21 @@ - + - + - + - + - + - + @@ -15918,13 +15924,13 @@ - + - + - + @@ -15933,59 +15939,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -15994,24 +16000,24 @@ - + - + - + - + - + - + - - + + @@ -16020,190 +16026,190 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -16241,7 +16247,7 @@ - + @@ -16249,7 +16255,7 @@ - + @@ -16287,7 +16293,7 @@ - + @@ -16301,7 +16307,7 @@ - + @@ -16312,7 +16318,7 @@ - + @@ -16332,7 +16338,7 @@ - + @@ -16340,7 +16346,7 @@ - + @@ -16369,7 +16375,7 @@ - + @@ -16380,15 +16386,15 @@ - + - + - - - + + + @@ -16416,39 +16422,39 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -16456,7 +16462,7 @@ - + @@ -16464,7 +16470,7 @@ - + @@ -16525,7 +16531,7 @@ - + @@ -16538,7 +16544,7 @@ - + @@ -16554,9 +16560,9 @@ - + - + @@ -16567,7 +16573,7 @@ - + @@ -16586,223 +16592,223 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -16822,7 +16828,7 @@ - + @@ -16840,7 +16846,7 @@ - + @@ -16854,7 +16860,7 @@ - + @@ -16865,10 +16871,10 @@ - + - + @@ -16885,7 +16891,7 @@ - + @@ -16956,7 +16962,7 @@ - + @@ -16985,7 +16991,7 @@ - + @@ -16999,7 +17005,7 @@ - + @@ -17013,17 +17019,17 @@ - + - - + + - + @@ -17031,10 +17037,10 @@ - + - + @@ -17045,30 +17051,30 @@ - + - + - + - + - + - + - + @@ -17077,90 +17083,90 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -17172,46 +17178,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -17220,35 +17226,35 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -17256,7 +17262,7 @@ - + @@ -17267,7 +17273,7 @@ - + @@ -17296,7 +17302,7 @@ - + @@ -17313,7 +17319,7 @@ - + @@ -17321,7 +17327,7 @@ - + @@ -17336,7 +17342,7 @@ - + @@ -17347,10 +17353,10 @@ - + - + @@ -17379,7 +17385,7 @@ - + @@ -17393,18 +17399,18 @@ - + - + - + - + - + @@ -17433,33 +17439,33 @@ - + - + - + - + - + - + - + - + @@ -17473,227 +17479,227 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -17701,2200 +17707,2200 @@ - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + - + - - + + - + - + - + - + - - + + - - + + - - + + - - - + + + - - - + + + + + + + - + + - - + + + - - - + + + - - - + + + + - - - - + + - - + + + - - - + + + + - - - - + + + + - - - - + + + - - - + + + - - - + + + - - - + - + + - - + + + - - - + + + + + - - - - - + + + + + + + - - - - - - - + - + + + - - - + + - - + + + - - - + + + + - - - - + + + + - - - - + + + + + + - - - - - - + + - - + + + - - - + + - + - - + + - - + + + - + - - + + - + - - + - + - + - + - - + + - + - - + + + - - - + + - + - - + + - + + - - + - + + - + - + + - - + + - - - + + - + - + - + - + - + - + + + - + - - - + - + + + - - - - + + - + - + + - - - - + + - - + + - - + + - - + + + - - - + + - + - - + + + - - - + + + + - - - - + + - - + + + - - - + + - - + + - - + + - - + + + - - - + + + - - - + + - - + + + + - - - - + + + + + - - - - - + + - - + - + + + + + + - - - - - - + + - - + + + + + - - - - - + + + + + + + + - - - - - - - - - - - - - - - - + + + + + - - - + + + + + + + - - + + + - - - + + + - - - + + + - - - + + + + - - - - + + + + + + + - - - - - - - + + + + - - - - + + + - - - + + - - + + - - - + + + - - + + + - - - + + + + - - - - + + + + - - - - + + - - + + + - - - + + + - - - + + + - + - + + - + - - + - - - + + + + - + - - + + - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + - - - - + + + - - - + + + - - - + + + + - - - - + + + - - - + + + - - - - - - + - + - + - + - + - + - + - + - - + + - - + + - - + + - + - - + + - - - - + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - + - + - - - + + + - + - - + + - + - - + + - - + + - + - - - - - + + + + + - - - - - + + + + + - - + + - + - + - + - + - + - - - + + + - - + + - - - + + + - - + + - + - + - + - + - - - + + + - - + + - - + + - - - - - - + + + + + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - - - + + + + - + - + - - + + - - - - + + + + + + + - - - - + - + - + - + - + - + - - + + - + - + - - + + - - + + - - + + - - - - + + + + - + - + - + - - + + + - - - - + + + - - - + + + - - + + - - + + - - - + + + - - - - + + + + - - - - - + + + + + - - + + - - + + - - - - - + + + + + - - + + - + - - + + - - - + + + - - - + + + - - + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - + - - - + + + - + - - + + - + - + - + - + - - + + - - - - - + + + + + - - - - - + + + + + - - + + - - + + - - - - + + + + - + - - - + + + - - - + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - + + + + - - + + - - + + - - - + + + - - + + - + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - + - - + + - - - - + + + + - + - - + + - + - - + + - - + + - - + + - - - + + + - - + + - + - + - + - + - - + + - + - - + + - + - + - + - + - - + + - - - + + + - - - + + + - + - + - + - - + + - - + + - - + + - - + + - - + + - + - - + + - + + + - - - + - - + + - - - - + + + + - - - - + + + + - - - + + + - - + + - + - - - + + + - - - + + + - - + + - - + + - + - + - - + + - - - + + + - - + + - - - - - + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -19903,78 +19909,78 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -19983,661 +19989,661 @@ - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + + + + + + + - + - - + + - - + + - - + + - - + + - + - - + + - + - - + + - - - - - - - + + + + + + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - + + + + + + - + + + - - - + + - - + + - - + - + + - - - - + + + + + - - - - + + - - + + + - - - + + - - + + + - - - - - - - - - - + + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -20649,260 +20655,260 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - - - - - - - - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + @@ -20917,1465 +20923,1464 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - + + + + + + + - - - + + - + - - - - - - - + + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - - - + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - + + - - - - + + + + - - + + - - - - + + + + - + - + + + + + - + + + - - - + + + - - - + + + - - - + + + - - - + + + + - - - - + + + - - - + + + + + - - - - - + + + + + + - - - - - - - - + + - - + + + + - - - + + - - + + + + - - - - + + + + - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - - - - - - + + + + + + - - + + - - - + + + - - + + - - - + + + - - + + - + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - + + - - - + + + - - + + - + - - + + - + - - - + + + - + - - - + + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - + - - + + - - + - + + - - + + - - - + + + - - - + + + - - - + + + - + - + - - + + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + + - - + - + - - + + - - + + - - + + + + + + + - - + + + + - - - - - - - - - + + - - - - - + + + + + - + - - + + - + - + - - + + - - - - - - - - - - - - + + + + + + + + + + + + - - - + + + - + - + - - - + + + - - - - + + + + - - + + - + - + - - - + + + - - - - - - - + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - + + + + + + + - - + + - - - - - - - - - - - + + + + + + + + + + + - - + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + + + - - - - - + + + + - - - - - - - - - + + + + + + + - - - + + + - - - - + + + + - - + + - - - - + + + + - - + + - - - - + + + + + + + + + + + + + - + + - - - - - - - - - - - + + + + + + + + + + + + - - + + + + - - - - + + + + - - - - - + + - - - - + + + - - + + - - - - - - - - - - - - + + + - + - + - + - + - + + + - - - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - + - + - - + + - + - + - + - + - + - + - + - - - - + + + + - - - + + + - + - + - - - + + + - - + + - - - - + + + + - - - + + + - + - + - - - + + + - - - - + + + + - - + + - - + + - + - - + + - - + + @@ -22383,963 +22388,963 @@ - - + + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - + + + + + + + + + + + + - - - - - - - + + + + + + + - - - + - - + + - + - - + + - - - - + + + + - - - + + + - + + + + + + + + + + - + + + - - + - - - + + - - + + + - - - + + + + - - - + + + - - - - + + - - - - - - - - - - - + + - - + + + - - - - - - + + + + + - - - + + + - - + + - - + + - - - - + + + + - - - + + + - - - - + + + + - - + + - - + + - - - - + + + + - - + + - - - - + + + + - - - + + + - - - - + + + + - - - + + + - - + + - + - + - + - + - + - + - + - - + + - - - - - + + + + + - - - + + + - + - + - - + + - - + + - - + + - - + + - + - - + + - - - + + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - - - - + + + + + - + - - - + + + - + - + - + - + - + - + - + - - - + + + - - - + + + - - + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - + + - - - + + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - - - + + + - - - - + + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - - + + + + - - + + - - + + - - - - - + + + + + - - + + - - - - - - + + + + + + - - - - + + + + - - - + + + - - - + + + - + - - + + - - - + + + - - - + + + - + - + - + - + @@ -23347,1146 +23352,1146 @@ - - - + + + - + - - - + + + - - - + + + - - - + + + - + - + - + - - + + - - - - - + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + + + + + + + - - + + - - + + - + - - + + - - - + + + + + + + + + + + + + - - - - - - - - - - - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + + + + + + + - + - - - + + + - - + + + + + + + + + + + - - - - - - - - - - - + + - - - - - + + + + + - - - + + + - - + + - - - - + + + + - - - + + + - + - + - + - + - - + + - - - + + + - - - + + + - + - - + + - + - - - + + + - - - - - + + + + + - - + + - - - + + + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - + + + + + + - - + + - - + + - - - + + + - - + + - + - - + + - + - + - + - + - - + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - - + + - - + + - + - - + + - - - - + + + + - - + + - - - + + + - - + + - + - - - + + + - - + + - - - + + + - + - - - + + + - - + + - - + + - - - + + + - - + + - - - - + + + + - - + + - - - + + + - - - - + + + + - + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - - - - - + + + + + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - - - + + + + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - - + + + - - + + - - + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - + + - - - + + + - - - + + + - - - - + + + + - - + + - - - + + + - - + + - + - - - + + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - - + + + + - - + + - + - + - + - + - - + + - - + + - - + + - - - + + + - + - - - - + + + + - + - - - - - - + + + + + + - - - + + + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + @@ -24501,358 +24506,358 @@ - + - - - - + + + + - - - - - - + + + + + + - - + + - - + + - - - - + + + + - - + + - - - + + + - - - + + + - - - + + + - - + + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - + + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -24873,124 +24878,124 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -24998,44 +25003,44 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -25071,7 +25076,7 @@ - + @@ -25122,7 +25127,7 @@ - + @@ -25134,14 +25139,14 @@ - + - + - - + + @@ -25183,30 +25188,30 @@ - + - + - + - + - + - + - + - + - - + + @@ -25229,39 +25234,39 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -25270,81 +25275,81 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -25359,321 +25364,321 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -25685,132 +25690,132 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -25827,186 +25832,186 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -26015,13 +26020,13 @@ - + - + - + @@ -26030,166 +26035,166 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -26198,220 +26203,220 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -26419,151 +26424,151 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -26572,304 +26577,304 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -26877,9 +26882,9 @@ - + - + @@ -26897,82 +26902,82 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - - + + @@ -26982,62 +26987,62 @@ - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -27052,63 +27057,63 @@ - + - + - + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + @@ -27116,82 +27121,82 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + @@ -27200,155 +27205,155 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + @@ -27362,261 +27367,261 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -27624,1387 +27629,1387 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + - - + + - - - + + + - - + + - + - - - + + + - - + + - - + + - + - + - - + + - - + + - - - - + + + + - - - + + + + + + + + - - - - - - - - - - - - - - - - - - + - - - + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + - - - - + + + + - - - - - - - - - + + + - - - + + - - - + + + - - + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + - - - + + - + - + + + + - + + - - - - + + + + - - + + + - - - - + + + - - - + + - - - + + + - - + - - - + + - + + + - - + + + + - - - + + - - - - + + + + - - + + + + + + - - - - + + + + + - - - - - - + + + + + + + - - - - - + + + + + - - - - - + + + + - - - - - + + + + + - - - - - - + + + - - + - - - - + + + + - - - + + + + + + - - - - + - - - - - - + + - + + + - - + + - - - + + + + - - + + + - - - - + + + + + - - - + + - - - - - + + - - + + - - + + - - + + + - - + - - - + + + - + + - - - + + + - - + + + - - - + + + + - - - + + + - - - - + + + + + + - - - + - - - - - - + + - + + - - + - - + + - + - - + + + + - + + + + + + + + + + + + - - - - + + - - - - - - - - - - - + - - + + + + - - + + + - - - - + + - - - - + + - - - + + + + - - + + + + - - - - + + + + + + - - - - + + + + + + + + + - - - - - - + + + + - - - - - - - - - + + + + - - - - + + - - - - - - - - + + + - - - + + + + + + - - + + - - + + + + - - + + + - - - - + + - - - + + - - + + + - - + + - - - + + + - - + + + - - - + + - - - + + + - - + + + - - - + + + - - - + + - - - + + + - - + + + + - - - + + + + - - - - + + + - - - - + + - - - + + - - + + + - - + + + - - - + + - - - + + + - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + - - - + + + - - - - + + + - - - + + + - - - + + - - - - - - - - - - + - + - + - + - + - - - - + + + + - - + + - - + + - - + + - - + + - - - - - - + + + + + + - - + + - - - - - - + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - + + + + + + + + + - + - - + + - - + + - - - + + + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - - - - - + + + + + - - - - - + + + + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - - - + + + + - + - - - + + + - + - - - + + + - - - - - + + + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - + - - + + - - - - + + + + - - + + - + - + - - - + + + - - - - - + + + + + - - + + - - + + - - + + - + - + - + - + - - + + - - - + + + - + - + - + @@ -29013,891 +29018,891 @@ - + - + - + - + - + - + - + - - + + - - - - + + + + - + - - + + - - + + - + - - - + + + - - - + + + - - - - + + + + - - - + + + - + - + - + - + - + - + - + - - - + + + - - - + + + - - - + + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + - - + + - + + - - - - - + + + + - - + + - - - - + + + + - - + + - + - - - + + + - - - + + + - + - - + + - - + + - - + + - + - - + + - - - - + + + + - - + + - - - + + + - - + + - - + + - - - - - + + + + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - - + + + - - + + - - + + - - - - + + + + - - + + - - + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - - - + + + - - + + - - - + + + - - - - + + + + - - + + - - - - - - + + + + + + - + - + - + - + - + - - - + + + - - - + + + - - + + - - - - + + + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - + + + - - + + - - + + - + - - + + - + - + - - + + - - + + - - + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - + + + + + - + - - + + - - + + - - + + - - + + - - - + + + - - - - + + + + - - - + + + - - + + @@ -29906,89 +29911,89 @@ - - - - - + + + + + - - - - + + + + - - - - - - - - + + + + + + + + - - + + - - - - + + + + - - - + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -30003,163 +30008,163 @@ - - - + + + - - + + - - + + - + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - + + - + - + - + - + - + - + - - - - - + + + + + - - - + + + - - - - - - + + + + + + - - + + - - - + + + - - + + - - - - + + + + - - - + + + - - - - - + + + + + - - + + - + - - + + - - + + - - - + + + - - + + - - + + @@ -30168,838 +30173,838 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - - - + + + - + - - - + + + - - - + + + - - - - + + + + - - - + + + - - + + - + - - - - - + + + + + - - + + - - - + + + - + - + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - + + + + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + + + - - - - + + - - - + + + - + - - + + - - + + - + - - + + - - + + - + - + - + - - + + - - - + + + - - - - - + + + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - + - - - + + + - - - - - - - - - + + + + + + + + + - + + - - - - + + + - - - + + + - + - - + + - + - + - + - + - + - + - + - - + + - + - - - + + + - - + + - + - - + + - + - + - + - + - - + + - - - - - - + + + + + + - - - + + + - - + + - - + + - - - + + + - - + + - - - + + + - - + + - + - - - + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -31008,39 +31013,39 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -31052,340 +31057,340 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -31396,354 +31401,354 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + - - + + - - - - + + + + - - - + + + - - + + - + - - - - - + + + + + + + + + + - - + + + + + + + - + + + - - + + - - + + - - + - + + + + - - + + + + - - - - - - + + - - - + + + - - + + - - - + + + + + - - + + - - - - - - - - - - - - + + + + + + + + - - + + + - + + + - - - - + + + - - - - - - - - - - - - - - + + - + - - + + - + - - - + + + - - - - + + + + - - + + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -31757,8 +31762,8 @@ - - + + @@ -31770,8 +31775,8 @@ - - + + @@ -31844,190 +31849,190 @@ - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - - + + + + - - + + + + + + + + + + + + + - - + + + - - - - - - - - - - - - - - - + + + - + - + - + - + - - + + - + - - + + - - + + - + - - - + + + - - - - + + + + - + - - + + - - + + - + - + - + - + @@ -32036,288 +32041,288 @@ - + - + - + - + - + - + + + - - - + - - + + - + - + - - + + - - - + + + - + - - - + + + - - + + - - - + + + - - + + - + - + - + - + - + - + - + + - - - - + + + - + - + - + - + - - + + - - - - + + + + - + - - - - + + + + - - + + - - + + - - - - - + + + + + - + - - + + - - - + + + - - - - + + + + - - - + + + - - + + - - + + - - - - - + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -32326,93 +32331,93 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -32421,68 +32426,68 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -32519,54 +32524,54 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - - + + @@ -32574,93 +32579,93 @@ - - + + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -32668,275 +32673,275 @@ - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + - - + + - + - - + + - + - + - - + + - - - + + + + + + + + + + + + - + + - - + + + - - + + - - - + + - - + - - + + + + + + - + + + + - - - - - - + + + + + + + - - - - + + + + + + + - - - - - - - + + + + + - - - - - - - + + + + + - - - - + + + + + - - - - - + + + + + - - - - - - + + + - - - - - + + - - - + + - - + + - - + + - - + + + + - - - + + + - - - - - + + - - - + + + + + - - + + + + + + - - - - - - - - - - - - - - - - - + + - - + + - + - + - + - - + + @@ -32963,355 +32968,355 @@ - - - + + + - - - + + + - - - + + + - - + + - - + + - + - + - + - + - + - - + + - - + + - - - + + + - - + + - - + + - + - - - + + + - - + + - - + + - + - + - - - + + + - - - + + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -33319,328 +33324,328 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -33649,600 +33654,600 @@ - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - + - + - + - - + + - - + + - - + + - - - + + + + + + + - - + + + + + + + + - + + + - - - + + - - - + + - - + + - - + + + - + + + - - - + + + - - - - + - - - + + - + + + + - - - - - - - - - + + + - - - - + + + + + + + + + + - - - - - + + - - - + + - - + + + - - + + - - - + + + + - - + + + + + - - - - + + - - - - - - - - - - - - - - + + + - - - - - + + + + + - - - - - + + + + + - - - + + + - - + + - - + + - + - + - - - + + + - + - - + + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - + - - + + - - - + + + - - - + + + - - + + - - - - + + + + - - + + - + - - - - + + + + - + - - + + - + - - - - + + + + - - - - - - + + + + + + - - + + - - - - + + + + - - + + - - + + - - - + + + - - + + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - - + + + - - + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - + - + @@ -34254,58 +34259,58 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -34319,302 +34324,302 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + + + - - + + + + - - - - - + - + - + - - + + - + - + - - - + + + - - + + - - - - + + + + + + + + + + + + + - + + - - - + + + + - - - - - - - - - - - - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + + + - - - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - + + - + - + - - + + - - - + + + - - + + - + - + + + + + + - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + @@ -34624,73 +34629,73 @@ - + - - - + + + - + - - + + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - - + + @@ -34701,86 +34706,86 @@ - + - + - + - + - + - - + + - - + + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -34789,129 +34794,129 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -34919,21 +34924,21 @@ - + - + - + - + - + - + @@ -34953,7 +34958,7 @@ - + @@ -34973,7 +34978,7 @@ - + @@ -34990,48 +34995,48 @@ - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - - + + @@ -35040,127 +35045,127 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -35168,703 +35173,703 @@ - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + - - - - + + + + - - - - + + + - - + + - + - + - - + + - + - - + + - - + + - + - - + + - - + + - - - - + + + + - - - - + + + + - + - - - - + + + + - - + + - - + + - - - - - + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - + - - + + - - + + - + + + + + + - - + + + - - + + - - - - + + + - - + + + + + + + + + + - - - - - - - - - + - - + + + + + - - - - - - + + + + - - - + + + + + - - - - + + + + - - - - - + + - - - + + - - - + + + - - - + + + - - - + + + + + - - - - + + + - - - + + - - + + + - - - + + + - + - - + + - - - + + + + + - + - - - - + + + + - - - + + - + - - - - + + + - - - + + - - + + + - - - + + + - - - + + + - - - + + + + + - - - - - - + + + - - - - - - - - - + + + + + - - + + - - - + + + - - - - + + + + - - + + - - + + - - + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + - - + + - - - + + + - - - - + + + + - + - - - + + + - - - + + + - + - + - - + + - - - - - + + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -35873,406 +35878,406 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -36292,450 +36297,450 @@ - + - + - + - + - + - + - + - + - - - + + + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - + + + + - - + + - - + + - - + + - - + + - - - + + + - + + + + + + + + + + + + + - - - + + + + + - - - + + + + - - - - - + + + - - - - + - - - + + + + + - + + + + + - - - - - + - - - - - + + - + + - - + + - - + + - - - - + + + + - - - - + + + - - - + + + - - + + + + - - - + + + - - - - + + + - - - + + + - - - - - - - - + + + - - - + + + + + + - - - - - - - - - - + + - + - + - + - + - + - - + + - + - - - - + + + + - - - + + + - - - + + + - + - - - + + + - - + + + + + + - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -36747,1204 +36752,1204 @@ - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - + - + - - - + + + - - + + - - + + - - + + - - - - - - - - - + + + + + + + + + - - + + - + - - - - + + + + - - - + + + - + - - - + + + - - - + + + - - + + - - - - + + + + - - + + - + - + + + + + + + + + + + - + + + - - - + + + - - - + + - - - + + - - + + + + + + - - + + + - - - - - - + + + - - - + + + - - - + + + + - - - + + + - - - - + + + + - - - - - + + + + - - - - - - + + + - - - + + + - - + + - - - + + - - + + + - - + + + - - - + + + - - - + + + - - - + + - - - + + + - - + + + - - - + + + + - - - + + - - - - - - - - - - - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - + + + + + + + + + + - - + + + + + + + + + + + - + + - - - + + + - - - + + - - - - - - - - - - - + + - + - + - - - + + + - + - - + + - + - + - + - + - + - + - + - + - - - - - + + + + + - - - + + + - - + + - + - - - - + + + + - - - - + + + + - - + + - - + + - - - + + + - - + + - + - - + + - - + + - - + + - - - + + + - - + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - + + - + - + - + - + - + - - + + - + - + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - + - - + + - + - - + + - - + + - + - + - + @@ -37953,173 +37958,173 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -38128,198 +38133,198 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -38328,659 +38333,659 @@ - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + + + + + + + + + + + + - + + - - - - + - - + + + - - - - - - - + - - + + + + + + - - + + - - + + - - - - - - - - - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - - - + + + + - - + + - - + + - - - + + + - - - - + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - + + - - - - - + + + + + - + - - + + - + - + - + - - + + - + - - + + - + - - + + - - + + - - + + - - + + - + - - + + - + - - + + - - + + - - - - - - + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -38991,45 +38996,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -39040,10 +39045,10 @@ - + - + @@ -39066,15 +39071,15 @@ - + - + - + @@ -39095,21 +39100,21 @@ - + - + - + - + - + @@ -39130,92 +39135,92 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -39223,34 +39228,34 @@ - + - + - + - + - + - + - + - + - + @@ -39300,7 +39305,7 @@ - + @@ -39309,19 +39314,19 @@ - + - + - + - + - - + + @@ -39330,44 +39335,44 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -39381,15 +39386,15 @@ - + - + - + - + @@ -39398,7 +39403,7 @@ - + @@ -39412,7 +39417,7 @@ - + @@ -39424,12 +39429,12 @@ - + - + - + @@ -39438,144 +39443,144 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -39592,24 +39597,24 @@ - + - + - + - + - + - + - + @@ -39618,7 +39623,7 @@ - + @@ -39632,10 +39637,10 @@ - + - + @@ -39661,10 +39666,10 @@ - + - + @@ -39681,16 +39686,16 @@ - + - + - + @@ -39698,13 +39703,13 @@ - + - + - + @@ -39718,13 +39723,13 @@ - + - + - + @@ -39735,13 +39740,13 @@ - + - + - + @@ -39752,18 +39757,18 @@ - + - + - + - + - + @@ -39789,10 +39794,10 @@ - + - + @@ -39803,175 +39808,175 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -39980,380 +39985,380 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -40368,7 +40373,7 @@ - + @@ -40379,50 +40384,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -40451,7 +40456,7 @@ - + @@ -40460,7 +40465,7 @@ - + @@ -40468,7 +40473,7 @@ - + @@ -40485,7 +40490,7 @@ - + @@ -40494,7 +40499,7 @@ - + @@ -40503,10 +40508,10 @@ - + - + @@ -40514,10 +40519,10 @@ - + - + @@ -40525,9 +40530,9 @@ - + - + @@ -40536,27 +40541,27 @@ - + - + - + - + - + - + @@ -40564,10 +40569,10 @@ - + - + @@ -40575,7 +40580,7 @@ - + @@ -40589,10 +40594,10 @@ - + - + @@ -40609,10 +40614,10 @@ - + - + @@ -40621,7 +40626,7 @@ - + @@ -40630,19 +40635,19 @@ - + - + - + - + - - + + @@ -40662,24 +40667,24 @@ - + - + - + - + - + - + @@ -40687,35 +40692,35 @@ - + - + - + - + - + - + - + - + @@ -40729,13 +40734,13 @@ - + - + - + @@ -40746,16 +40751,16 @@ - + - + - + @@ -40763,13 +40768,13 @@ - + - + - + @@ -40795,8 +40800,8 @@ - - + + @@ -40813,12 +40818,12 @@ - + - + @@ -40830,7 +40835,7 @@ - + @@ -40842,12 +40847,12 @@ - + - + @@ -40859,7 +40864,7 @@ - + @@ -40868,7 +40873,7 @@ - + @@ -40876,19 +40881,19 @@ - + - + - + - + - + @@ -40897,7 +40902,7 @@ - + @@ -40908,16 +40913,16 @@ - + - + - + @@ -40932,23 +40937,23 @@ - + - + - + - + - + - + @@ -40957,21 +40962,21 @@ - + - + - + - + - + @@ -40979,36 +40984,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -41016,26 +41021,26 @@ - + - + - + - + - + - + @@ -41047,12 +41052,12 @@ - + - + @@ -41064,7 +41069,7 @@ - + @@ -41075,13 +41080,13 @@ - + - + - + @@ -41092,19 +41097,19 @@ - + - + - + @@ -41112,13 +41117,13 @@ - + - + - + @@ -41135,7 +41140,7 @@ - + @@ -41143,20 +41148,20 @@ - + - + - + - + - + - + @@ -41164,58 +41169,58 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -41223,7 +41228,7 @@ - + @@ -41232,10 +41237,10 @@ - + - + @@ -41243,7 +41248,7 @@ - + @@ -41252,10 +41257,10 @@ - + - + @@ -41278,10 +41283,10 @@ - + - + @@ -41292,21 +41297,21 @@ - + - + - + - + - + @@ -41314,7 +41319,7 @@ - + @@ -41334,7 +41339,7 @@ - + @@ -41351,1421 +41356,1421 @@ - + - + - + - + - + - + - + - + - - - + + + + + - + - - - - - + + + + + - + - - - - - + + + + + - + - + - + - - - - - - - - - + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - - + + - - + + - - + + - + - - + + - - - + + + - - - + + + + + + + + + - - - - + + + + - - - + + + - - - + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + + - - - + + + - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - - - - - - - + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - + + - - - - + + + + - - - + + + - - - - + + + + - - - + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + - - - + + + - + + - - - + - - + + - + + - - - - - - + - - + + - - + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + - - - - + + + - - + + - - - + + + - - + + + - - - + + + + - - - + + - - - - + + - - + + + + - - + + + - - - - + + - - - - - - - + + + + + + - + - - + + - - + + + - - + + - - - - - - - + + + + + + - - + + - - - - - - + + + + + + - - + + - + - + - - - - - - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + - - + + + - - - + + + + + + - - - - + + + + - - - - - - + + + + - - - - - + + + + - - - - - + + + + + - - - - + + + - - - - + + - - + + + + - - - - - - - - - - - - + + - - + + - - + + - - + + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - + + + + + + + + + + - - + + - - - + + + - - - + + + - + - - - - + + + + - - - + + + + + + + + + + + + + - - - - - - - - - - - - + + - - + + - - - + + + - - + + - + - - + + - - + + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - + - + - - - - - + + + + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -42779,27 +42784,27 @@ - + - + - + - + - + - + @@ -42808,12 +42813,12 @@ - + - + @@ -42843,10 +42848,10 @@ - + - + @@ -42860,19 +42865,19 @@ - + - + - + - + - + @@ -42901,7 +42906,7 @@ - + @@ -42939,25 +42944,25 @@ - + - + - + - + - + - + @@ -42977,30 +42982,30 @@ - + - + - + - + - + - + - + - + - + @@ -43011,7 +43016,7 @@ - + @@ -43026,25 +43031,25 @@ - + - + - + - + - + - + - + @@ -43056,19 +43061,19 @@ - + - + - + - + @@ -43080,101 +43085,101 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -43207,7 +43212,7 @@ - + @@ -43222,15 +43227,15 @@ - + - + - + - + @@ -43239,12 +43244,12 @@ - + - + - + @@ -43253,53 +43258,53 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -43313,8 +43318,8 @@ - - + + @@ -43329,284 +43334,284 @@ - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -43615,119 +43620,119 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -43736,41 +43741,41 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -43778,43 +43783,43 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -43825,203 +43830,203 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + - - - - + + + + + + + + + + + + + + + - - - + + - - - + - + - + + - + + - + - + + + + - - - - - - - - - - + + - - - + + + + + - - - - - - + + + + + + + + + - - + + - - - - + + + - - + + - - - + + + - + - - - + + + + + - - + + + + + - - - - - + + + + + + - - - - - - - - - - - - - - - - + - + - + @@ -44030,78 +44035,78 @@ - - - + + + - - + + - - - - - - + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -44110,30 +44115,30 @@ - + - + - + - + - + - + - + - + - + @@ -44142,10 +44147,10 @@ - + - + @@ -44154,611 +44159,611 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + - - + + - - + + - + - + - + - + + + + + + + + + + + - + + + + + + + - - - + + - - - - - - - + - - + + - + + - - + + + - - - - - - - - - - + + + - - + + + + + + + - - + + + - - - + + - - - + + + + - - - - - - - - - - - + - + - + - - + + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + - - - - + + + + - + - - + + - - + + - - - + + + - - - - + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -44773,1667 +44778,1667 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - - + + + - + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - - - + + + + - + - + - + - + - - - + + + - - + + - + - + - - - + + + + + + + + + + + + + + + - - - - - + + - + + - - + + - - - - - - - + + - - - + + + + + + + + - - - - + + + - - + + + - - - + + + - - - + + + - - - + + + + - - - - - - - - - - - - - + + - + - - - + + + - - + + - - - - - + + + + + - - + + - - + + - - + + - + - - + + - + - - + + - - + + - + - - - - - + + + + + - + - - + + - + - - + + - - - + + + - - - + + + - - + + - + - - - + + + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - - - - - - - + + + + + + + - - + + - - + + - - + + - + - + - - + + - - - + + + - - - + + + - + - + - - - - + + + + - - - - - + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + - - + + - - + + - - + + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -46442,356 +46447,356 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - - - + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -46800,330 +46805,331 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - + + + + + + + + - + - - - - - + + + + + - - - - - + + + - + - - + + - - - + + + - - - + + + - - - + + + - + - + - + - + - + - - + + - + - + - + - - + + + + + + + + + + + + - - - + + + - - - + + + - + - + - - - + + - - - + + - - + + + - - + + + - + + - + - - - + + + - - + + - + - - - + + + - - + + - + - - - + + + + - - - - + + + - - - - - - - - - - - - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + + @@ -47131,143 +47137,142 @@ - - - + + + - - - + + - - + + - - + + - - - + + + - - + + - - + + - + - + - - - - - - + + + + + + - + - - + + - - - + + + + + + + + + + + - - - - - + + + + + - - - - - + + + + - - - - + + + - - - + + - - + + + - - - + + + + - - - - - + + - - - + + + - - + + + - - - + + + - - - + - - - - - - + + + - + @@ -47278,7 +47283,7 @@ - + @@ -47305,7 +47310,7 @@ - + @@ -47320,140 +47325,140 @@ - + - + - + - + - + - - + + - - + + - - + + - + - - - - + + + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -47468,81 +47473,81 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -47551,219 +47556,219 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -47771,21 +47776,21 @@ - - + + - + - + - + - - + + @@ -47793,9 +47798,9 @@ - - - + + + @@ -47822,254 +47827,258 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - + + + + + + + + + + + - + + + + - - - + - - - - + + + - + + - - - + + - - + + + - + - - - + + - - + + - - + + + - + + + - - - - - - - - - - + + - - - + + + + + + + + - - - - + + - - + + + + - - + + + - - - - + + + + - - - + + + + - - - - - - - - - - - - - - - + + + - - - - - + + + + + - - + + - + - - - + + + - + - + - + - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - + - - + + - - + + + + + + @@ -48080,251 +48089,247 @@ - - + + - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -48333,19 +48338,19 @@ - + - + - + - + - + @@ -48354,13 +48359,13 @@ - + - + - + @@ -48369,73 +48374,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -48444,277 +48449,277 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - + - + @@ -48722,59 +48727,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -48789,78 +48794,78 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -48875,189 +48880,189 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -49077,75 +49082,75 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -49154,410 +49159,410 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -49569,394 +49574,386 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -49984,8 +49981,8 @@ - - + + @@ -50011,142 +50008,142 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50154,7 +50151,7 @@ - + @@ -50168,28 +50165,28 @@ - + - + - + - + - + - + - + - + - + @@ -50201,93 +50198,93 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50304,252 +50301,252 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50558,110 +50555,110 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50676,15 +50673,15 @@ - + - + - + - + @@ -50696,16 +50693,16 @@ - + - + - + @@ -50731,58 +50728,58 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50790,61 +50787,61 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50859,57 +50856,57 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50918,46 +50915,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50972,55 +50969,55 @@ - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -51046,63 +51043,63 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -51110,75 +51107,75 @@ - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -51207,371 +51204,371 @@ - - + + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -51582,13 +51579,13 @@ - + - + - + @@ -51597,1315 +51594,1323 @@ - + - + - + - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - + - + - - + + - + - - - + + + - - + + - + - + - + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - - - + + + + - - + + - - + + - - - - + + + + + + + + + + + + + + + - - + + - + + + - + + - - + + - - - - - - + + - - + + + + + - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - + + + + + - + + + + - + - - - + - - - - - + + + - + + + - + + - - - + + + + + - - - - - - + + + - - - - - + + - - - + + + - - + + + - - - + + + - - - + + - - - + - - + + - + + + + + - + + + + - - - - - + + + - + + + - - - - - - + + + - - - + + + - - - + + - - - + + + - - + + + - - - - + + + + - - - + - - - - + + + + + - + + + + + - - - - - + - - - - - - - + + + + - - - + + + - - - - - - - - - - - + + - - - + + + - - - - - + + + + + - - - - - + + + + + - - - - + + + + + + + + + + + + + + - - - + + - - - + + + - - + + + - - - + + - - - + + - - + + + + + + - - + + + + + + - - - - - - + + - - - - - - - - - - - + + + - - + + + + + + + + - - - + + + + - - - + + - - - - + + + - - + + + - - - + + + - - - - - - - - + + + + + + - - - - - - + + + + + - - - - - + + + + + + + - - + + + + - - - + + - - - - + + + - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + - - + + - - + + + - - + + + - - - + + + + - - - + + + + - - - - + + + - - - - + + + + + + - - - + + + + + - - - - - - + + + - - - - - - - - - - - - - + - + - + - + - + - + - + - + - - - - - - - + - + - + - + + + + + + + - + - + - + - + - + - + - + - + - + + + + + + + + + - - + + - + - - - + + + - + - - - + + + - - - + + + - - + + - - - + + + - + - + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -52934,27 +52939,27 @@ - + - + - + - + - + - + - + - + @@ -52966,7 +52971,7 @@ - + @@ -52980,7 +52985,7 @@ - + @@ -52992,7 +52997,7 @@ - + @@ -53006,10 +53011,10 @@ - + - + @@ -53017,13 +53022,13 @@ - + - + - + @@ -53049,28 +53054,28 @@ - - + + - + - + - + - + - + - + @@ -53094,26 +53099,26 @@ - + - + - + - + - + - + - + @@ -53121,112 +53126,112 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -53241,71 +53246,71 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -53316,8 +53321,8 @@ - - + + @@ -53326,54 +53331,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -53385,27 +53390,27 @@ - + - + - + - + - + - + - + - + @@ -53413,7 +53418,7 @@ - + @@ -53428,13 +53433,13 @@ - + - + - + @@ -53449,39 +53454,39 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -53489,13 +53494,13 @@ - + - + @@ -53506,10 +53511,10 @@ - + - + @@ -53523,7 +53528,7 @@ - + @@ -53532,10 +53537,10 @@ - + - + @@ -53549,19 +53554,19 @@ - + - + - + - + - + @@ -53578,7 +53583,7 @@ - + @@ -53589,30 +53594,30 @@ - + - + - + - + - + - + - + @@ -53620,7 +53625,7 @@ - + @@ -53638,165 +53643,165 @@ - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -53805,16 +53810,16 @@ - + - + - + - + @@ -53829,60 +53834,60 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + @@ -53896,26 +53901,26 @@ - + - + - + - + - + - + - - + + @@ -53923,474 +53928,474 @@ - - - - - - - - + + + + + + + + + + - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - + + + + + + - - - - - - + + + + + + + + + - - + + - - - + + + - + - - - + + + - - - - + + + + - - - + + + - + - + - - + + - + - - + + - + - - + + - - - - - - - - + + + + + + + + - - + + - - + + - - + + - + - + - + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - + - + - + - + - - + + - + - + - - - - - - + + + + + + - + - - + + - + - - + + - + - + - - - + + + - + - - - + + + - - - + + + - + - - - + + + - - - + + + - + - + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + + + + + + + + + + - + + - - - - - - - + + + - - - - + + + + + + + + + - - - - - + + - - - - - - - - - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -54398,46 +54403,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -54446,301 +54451,301 @@ - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + - - + + - - + + - + - + - - + + - - + + - - + + - + - + - - + + - - + + - - - + + + - - + + - + - + - + - - + + - - + + - - - + + + - - + + - + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + + + + + + + + + + - + + - - + + - - - - - - - - + + + + - - - - + + + + + + + - - + + + - - - - - - - - - - - - + + - + - - - - + + + + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + @@ -54752,105 +54757,105 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + + + - - - - + + + + + - - - - + - - - - - - + - - - - - + - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + - - + + - + @@ -54862,106 +54867,106 @@ - + - + - + - + - + - + - + - + - + - + + + - - - - + + - - - - - + + + + + - + - + - - - + + + - - + + - - - + + + - - + + - - + + - + - - - - + + + + - - - - + + + + - - + + - + - + @@ -54976,366 +54981,366 @@ - + - + - + - + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - + - - - + + + - + - - - + + + - + - + - - - - + + + + - - + + - - + + - - + + - + - + - + - - + + - - - - + + + + - - + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + + - + - - + - - + + - - + + - - + + - - + + - - - - + + + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - - + + - - + + - - - + + + @@ -55343,66 +55348,66 @@ - - + + - - + + - + - - - + + + - - + + - - - + + + - - + + - - + + - + - - - - - + + + + + - + - + - - + + @@ -55410,23 +55415,23 @@ - + - + - + - + - + - + @@ -55435,49 +55440,49 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -55497,411 +55502,411 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - - + + @@ -55909,1433 +55914,1433 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + - - + + - - - - + + + + - - - - + + + + - - + + - + - + - + - - + + - - + + - + - + - + - - - + + + - - + + - + - - - + + + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - - + + - - + + - - - + + + - - - - + + + + + + + + + + + + + + + - + - - - - + + - + + + + - - + + + - - - - + + + - - - + + + + + - - - + + + - - - - - + + + - - - + - - - + + + + - + + + + - + + + - + - + + + - + - - - - - - + - - - + + - - - + + + + - - - + + - - - - - - + + + + + + - - - - + + + + - - - - - + + - - - + + + + + + - - + + - - - - - - + + - - + + + + - - + + + + - - - + - - - - - - - - - - - - + + - - - + + + - - + + - - - - - - + + + + + + - - - - + + + + - + - + - + - + - - - - - + + + + + - - - + + + - + - + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - - + + - - + + - + - + - - + + - - + + - + - - + + - - + + - - + + - - + + - + - + - + - - + + - - - + + + - - + + - - + + - - + + - - + + - + - - + + - + - + - - + + - + - + - + - + - - + + - - - + + + - + - + - + - - + + - - - - - + + + + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + + + - - - - - - - - + + + + + + - + - - - + + + - - + + - + - - + + + + + - - - - + - - + + - + - - - - + + + + - - - + + + - - + + - - + + - + - + + + + + + + + + + + - - - - - - - - - - - + - - - + + + - - - + + + + + + + + - - - + + + + + + + + + + + - - - - - - - - - - - - - - - + + - - + + - - + + - + - - - - + + + + - + - + - + - + - + - + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - + + - + - + - + - - + + - + - - - + + + - - - + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - + - - - - + + + + - - - + + + - - - - + + + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -57362,813 +57367,813 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - + + + + - - + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - + + - - + + - - - - - + + + + + - - + + - - - - - - - + + + + + + + - - - + + + - + - - + + - - - + + + - - - - + + + + + + + + + + + + + - - - + + + + - + + - - - + + + - - + + + + + - - - + + + - - - - - + + + - - - + + + - - - + - - - + + + + - + + + + - - - - + + + - - - - + + + + - - - - - + + + + - - - - - - + + + + + + - - - + + + - - - - - + + + + - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - - - - - - - - - - - + + + - - + + - + - + - + - + - + - + - + - + - - + + + - - - + + - - + + - - + + - + - - - + + + - - - + + + - - - - + + + + - - - - - - + + + + + + - - + + - - - - - + + + + + - - + + - - - + + + + + + + + + - - - + + + + - - - - + + - - + + + + - - - - + + + - - - - - - - - - - - + + + + + - - - - - + + + + + - - - - - - + + + + + + - - - - - - - - + + + + + + + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - + + + + + + + + + - - + + - + - + - - - - - + + + + + - - + + - - + + - + @@ -58197,22 +58202,22 @@ - + - + - + - + - + @@ -58220,7 +58225,7 @@ - + @@ -58228,378 +58233,378 @@ - - - + + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - + - + - + - - + + - - - + + + - - - + + + - + - - - + + + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - + - + - - - - - + + + + + + + - - - - - - - - - - + + + + + + + + - + - + - - + + - - + + - - + + - - - - + + + + - - - + + + - - - - + + + + - - - + + + + + + + + + + + + + + - - + + + - - - + + + + - - - - - - - - - - + + + + - - - - - + + + - - - + + + - - - - - - - - - - + + + + + - - - - + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -58607,464 +58612,464 @@ + - - + - + - - - + + + - + - - - + + + - - + + - - + + - - - + + + - + - + - + - + - - + + - + - + - + - + - - + + - - + + - + - - + + - - + + - - - + + + - - + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - + + - - + + - + - + - + - - + + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -59088,76 +59093,76 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -59168,150 +59173,150 @@ - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + @@ -59320,324 +59325,324 @@ - + - + - + - + - + - + - + - + - + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + + + + + + + + + + + - - - + + - + + - - + + + - + + + - - - + + - - - - + + - - + + - - + + + - - - - + + + - - - - - + + + + + + - - - - - - - - - - - - - + + - + - + - + - + - - + + - + - - + + - - + + - - + + - + - - + + - - - - + + + + - - + + - - - - + + + + - - - - + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -59646,531 +59651,531 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - + + + - - + + - - - + + + - - - - + + + + + + + + + + + + + - - - + + + - + + - - + + + - - + + + - - - + + + + - - - + + + + - - - - + + + - - - - + + + + - - - + + + - - - - + + + + - - - + + + + - - - - + + + - - - - + + + + - - - + + + + - - - - + + + + - - - - + + - - - - + + - - + - - - - - - - - - - - - + + + - + - + - + - + - + - - - - + + + + - - - + + + - - + + - - - + + + - + - - + + - - - + + + - - + + - - + + - - - + + + - - + + - - - - - + + + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + @@ -60182,108 +60187,108 @@ - + - + - + - + - + - + - + - + - + - - + + - - - - - - - - + + + + + + + + - - - + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - + - + - + - + - + - + - + - + - + - + - + @@ -60292,84 +60297,84 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -60398,154 +60403,154 @@ - + - + - + - + - + - + - + - + - + - - - - - + + + + + + + - - - - - - - + + + + + - - + + - - + + - - + + - - - + + + - - + + - + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + + - - - - - - - - - - - - - - + + + - - - - - + + + + + - - - - + + + + - - + + - - - + + + - - + + - + - + - + - + @@ -60563,158 +60568,158 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - + + + + + + - + - + - - + + - - - + + + - - + + - - - - - + + + + + - - - + + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -60723,318 +60728,318 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -61043,209 +61048,209 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -61254,102 +61259,102 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -61358,49 +61363,49 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -61409,47 +61414,47 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -61457,102 +61462,102 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + @@ -61561,25 +61566,25 @@ - + - + - + - - + + - + - - + + @@ -61590,410 +61595,410 @@ - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - + - - + + + + + + + + + + - - - - - - - - - + - - + + - - + + + + + + + + + + + + - - + - - + - + + + + - - - - - - - - - - - - + - - - - + + + + - - + + + + + + + - - - + + + + + + + - - + + - - - + + - - - - - - - - - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - - - - - - - - + + + + + + + + - + - + - + - + - - - + + + - - + + - - - + + + - + - + - + - + + + + + + + + + + + - - + + + - - - - + + + + - - - - - - - - - - - - - + + - + - - + + - + - - - - + + + + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -62002,333 +62007,333 @@ - + - + - + - + - - - + + + - + - - + + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - - + + + - - + + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -62337,282 +62342,282 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + @@ -62621,39 +62626,39 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -62665,61 +62670,61 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -62733,165 +62738,165 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - - + + @@ -62906,118 +62911,118 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + @@ -63026,159 +63031,159 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -63190,108 +63195,108 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -63314,52 +63319,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -63370,8 +63375,8 @@ - - + + @@ -63384,8 +63389,8 @@ - - + + @@ -63411,8 +63416,8 @@ - - + + @@ -63425,347 +63430,347 @@ - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - - - + + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - + + - - + + - - + + - - - - + + + + - - - - - - + + + + + + - - - - - - - + + + + + + + - + - + - - + + + + + + + + + + + + - - + + + - - + + + - - - + + + + + - - - + - - - - - + + - - - - - + - - - - - + + + + + + + + + + + + - + - - - - + + + - - + + - - - + + + - - + + - - - - - - - - - + + - - + + + + + + + + - - + + + + - - - - + + + + - - - - + + + + - - - - - - - - - - - - - - - + + + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - - + + - - - + + + - - - - + + + + - + - - - - + + + + - + - - - - - + + + + + @@ -63774,1439 +63779,1439 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - + + + + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - - + + + + - - - - + + + + - - + + + + + + + - - - + + + + + + + - + + - - - + + - - - + + - - + + + - - + + + - - - + + + - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + + - - - - - + + + + + - - + - + - - + + - - + + - - + + - - + + - - - - + + + + - - + + - - + + - + - + - - + + - + - + - - - + + + + + + + + - - + + - - + - - - + + + + - - - + + + + + - - - - - - - - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + - - - - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - + + - - - - + + + + - - - - + + + + - - - + + + - + - - + + - - + + + + + + + + + + + + + + + + + - - - + + + + + + - - - - - - + - - - - - - - - - - - - - - - - + + + - + - - + + - + - - - + + + - - - - + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + - - + + - - - + + + - - + + - + - - + + - - - + + + + + + + + + + + + + - - + + + + - - + + - - - - + + - - + + + + - - - - - - - - - + + + - - - - + + + + + + + + + - - - - + + - - - + + - - + + + - - + + + + - - - + + + - - - - + + + + - - - + + - - - - - - - - - - - + - + + + + + + + + + + - - - + + - - - - - - - - - - - + + + - - - - + + + + - + - - + + - + - + - + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - + - + - + - + - + - - - - + + + + - - + + - + - - + + - - - + + + - - - - + + + + - - - + + + - - + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + - + - + - + - + - + - + - + - + - + @@ -65233,202 +65238,202 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + @@ -65437,9 +65442,9 @@ - + - + @@ -65448,36 +65453,36 @@ - + - + - + - + - + - + - + - + - + - + - - + + @@ -65487,26 +65492,26 @@ - + - + - + - + - + - + - + - + @@ -65515,225 +65520,225 @@ - + - - - + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - - + + - + - - + + - + - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - + + - - - - + + - - + - - + + - + + - - + + - + + - - + + + - + - + - - + + - + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + + - - + + + - - - - - - - - - - - - - - - + + + - - - + + + - + - + - + - - - + + + - - + + - + - - + + - - + + @@ -65745,48 +65750,48 @@ - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -65804,10 +65809,10 @@ - + - + @@ -65816,109 +65821,109 @@ - + - + - + - + - - - - - - + + + + + + + + - - - + - + - + - + - + - - - + + + - + - + - + - + - - + + - - + + - - - - + + + + - - + + + + + + + + + + + + + - - + - - - - - - - - - - - + - - + + - - + + - - - - + + + + @@ -65932,215 +65937,215 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -66152,112 +66157,112 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + @@ -66266,80 +66271,80 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -66357,994 +66362,994 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + - - - - - - - - - + + - - - + + + + - - - - - + + + + + + + + + + + - - - - + + + + + - - - - + + + + + - - - - - + + + - - - - - + + - - - + + + - - + + - - - + + + - - - - - - - - - - - + + - + + + + + + + + + + + - - - + + + - - - + + + - - - - - - - - - - - - - + + + - - + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - - - - + + + + + + - - - - - - - - - + + + + + + + + + - - - + - - - + + + - + - - + + - - + + - + - - + + - - + + - - - + + + - - - - + + + + - - + + - - - + + + - - - + + + - - - + + + - + - + - - + + + + + + + + + + + + - + + - - - + + + - - + - - - - - - - + + + - - - - + + + + + + + - - - + + + - - + + + - - - - - - - - - - - - + + - - + + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67355,10 +67360,10 @@ - + - + @@ -67375,36 +67380,36 @@ - + - + - + - + - + - + - + - + - - + + - + @@ -67415,7 +67420,7 @@ - + @@ -67450,203 +67455,203 @@ - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67655,174 +67660,174 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - - + + - + - - + + @@ -67831,47 +67836,47 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - - - + + + @@ -67881,145 +67886,145 @@ - - - + + + - + - + - - + + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -68030,510 +68035,510 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - + - - - + - + - - + + - - + + - + - - + + - + - + - + - + - + - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + - - - - - - - - + + + + - - - - - - - + + + + + + + - - - - + + + + + + - - - - - - - + + + + + + + - - - + + - - + + + - - - - - - - + + + + + + - - - - - - + + + + + + + - + + - - - - + + - - - - - - - + + + - - - - - - + + + + + - - - - + + + + - - - - + + + + + - + + - - - - + - - - + - + + - + - - + - + + - + + - - + + - - + + + - - - - + + + + - - - - - + + + + - - - + + - - - + + - - + + + - - + + + + - - - + + + + - - - - + + + - - - - + + - - - + + - - + + + - - + + - - - + + + - - + + + - - - + + + + - - - + + + - - - - + + + + - - - + + + - - - - + + + + - - - + + + + + - - - - - - - - - - - - - - - - + + + - - + + - - + + - - - - + + + + - - - + + + - - - - + + + + - + - + - + - + @@ -68545,119 +68550,119 @@ - + - + - + - + - - + + - - - - - + + + + + - - + + - - + + - - + + - - + + - - - + + + - + - - + + - - + + - + - - + + - + - - + + - - + + - - + + - - - - + + + + - - - - + + + + - + - - + + - + - - - - - - + + + + + + - - + + @@ -68665,520 +68670,520 @@ - - + + - - + + - - + + - - + + - - + + - - - - - - + + + + + + - - - + + + - - - + + + - - - - - - + + + + + + - - - - - - + + + + + + - + - + - + - - - - - - + + + + + + - - + + - - - - - + + + + + - - + + - - - - - + + + + + - - + + - - + + - - - - - - + + + + + + - - - + + + - - + + - - + + - - - - - - - + + + + + + + - - - - + + + + - - - + + + - - - - + + + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - + + + + + + - + - - + + - - + + - - + + - - + + - - - + + + - - - - + + + + - - - + + + - - + + - + - + - - - + + + - - + + - - + + - - - - + + + + - - - - - + + + + + - - + + - - + + - - + + - - - + + + - - + + - - - - + + + + - - - + + + - - - + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - + + + + + + + + + + - - - + + + - - + + + + + + + + + + + + - - + + - - - - - - - - - - - - + + - - + + @@ -69194,267 +69199,267 @@ - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - - - + + + + - - + + - - + + - + - - - - - - + + + + + + - + - + - - - + + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - + - - + + - + - - - + + + - - - - - - + + + + + + - - + + - + - + - + - + - + - - + + - - + + - - - + + + - - + + - - + + - - - - - + + + + + - - - - + + + + - - - + + + - - + + - - + + - - + + - - - + + + - + - - - + + + - - + + - + - + - + - + - + - + @@ -69463,63 +69468,63 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -69536,7 +69541,7 @@ - + @@ -69547,10 +69552,10 @@ - + - + @@ -69567,7 +69572,7 @@ - + @@ -69581,7 +69586,7 @@ - + @@ -69595,10 +69600,10 @@ - + - + @@ -69621,7 +69626,7 @@ - + @@ -69635,19 +69640,19 @@ - + - + - + - + @@ -69658,13 +69663,13 @@ - + - + - + @@ -69675,13 +69680,13 @@ - + - + @@ -69698,7 +69703,7 @@ - + @@ -69709,10 +69714,10 @@ - + - + @@ -69723,13 +69728,13 @@ - + - + @@ -69740,10 +69745,10 @@ - + - + @@ -69752,13 +69757,13 @@ - + - + @@ -69769,981 +69774,981 @@ - + - + - - - - - - + - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - + + + - - - - - + + + + + - - + + - - + + - - - + + + - - + + - - + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - - - + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - + + - - - - - + + + + + - - - + + + - - + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - - + + + + + + + + - - + + + + + + - + + - - + + + - - + + - - - + + + + + + - - + + - - - - - - + + + - - + + + - - - + + - - - + + + - - + + + - - - + + + - - - + + + + + - - - + + + + + + - - - - - + + + + - - - - - - + - - - - + + - + + - - + + - - + - - + + - + + - - + + - - + + - - + + + - - + + - - - - + + - - - + + - - - + + + - - - + + + + - - + + + - - - + + + - - - + + + - - - - - - - - - - - - + + - - - + + + - - + + - - + + - + - + - - - + + + - - + + - + - + - - - - + + + + - - + + - - - - + + + + - - + + - + - - + + - + - - + + - + - + - + - + - + @@ -70755,762 +70760,762 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + - + - - + + - + - - - - + + + + - + + + + + + + + + + - - + + - + + + + - + + + + - - - - + + - - - - - + + + + + - - + + + - - - - - + + - - - - + + + - - - - + + + - - - - + + + - - + + - - - - - - - - - + - - + + - - - + + + - + - + - + - + @@ -71524,40 +71529,40 @@ - + - + - + - + - + - + - + - + - + - + @@ -71566,56 +71571,56 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -71629,433 +71634,433 @@ - + - + - + - + - + - + - + - + - + - + - + - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - + + + - + - - + + - + - - - - + + + + - - + + - + - + - + - + - + - - - + + + - - + + - - - + + + - + - - - - - - + + + + + + - - - + + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72063,63 +72068,63 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72127,219 +72132,219 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72348,251 +72353,251 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72601,499 +72606,499 @@ - + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - + + + + - - + + - + - - + + - - - + + + - - - - - + + + + + - - + + - - + + - + - - - - + + + + - - - - + + + + + + + + + + + + + - + - - + + - + + - - + - - + + - + + - - + + - - + + + - - + - - - + + - + + - - + + - - + + + - - + + - - - + - - + + - - - - - - - - - - + + + + + + + + + + + + - - + + - - - - + + + + - - - + + + - - - - + + + + - - - + + + + - - - - - + + + + + - - - - - - - - - - - + + + - - + - + + + - - - + + + + + + + - - - + + + - - + + - - - + + - - + + + - - + + - - - + + + - - + + - - - + + - - + + - - + + + - - - - - - - - - - - - + + + - - - + + + - - - + + + - + - + - + - - + + - + - + - + - - + + - - + + - + - - - + + + - - - + + + - - + + - - + + - - + + - + - + - + - + - + - + - - + + - + - + - + - + - - + + - - + + @@ -73102,587 +73107,587 @@ - - + + - + - + - - - - + + + + - - + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - - + + + + - + - - + + - + - - - + + + - - - + + + - - - + + + - - - - - + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - + - + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - + + - + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - + - + - + - - + + - + - - - + + + - - + + - - - + + + - - - - - - - + + + + + + + + + + + + + + + + - + + + - - - - - - - + + + + + + + - + - - - + + - - - - - - - - - - - - - - + + + + - - - - - - + + + + + + - - + + - - + + - - + + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -73696,45 +73701,45 @@ - + - + - + - - + + - - + + - + - + - + - + - + - + - + @@ -73746,76 +73751,76 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -73841,16 +73846,16 @@ - + - + - + - + @@ -73901,10 +73906,10 @@ - + - + @@ -73915,12 +73920,12 @@ - + - + @@ -73935,19 +73940,19 @@ - + - + - + - + @@ -73956,30 +73961,30 @@ - + - + - + - + - + - + - + - + - + @@ -74009,28 +74014,28 @@ - + - + - + - + - + - + - + - + @@ -74045,7 +74050,7 @@ - + @@ -74071,86 +74076,86 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -74158,90 +74163,90 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -74261,7 +74266,7 @@ - + @@ -74281,7 +74286,7 @@ - + @@ -74304,223 +74309,223 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + + + + + + + + + + - + + - - + - - + + - + + - - + + + - - + + - - - + + - - + + - - + + + + + + - - - + + + + + - - - - - - - + + + + + - - - - - + + - - - - - + + + - - + + + - - - + + + - - - + + + + - - - + + + + + - - - - - - - - - - - - - - + @@ -74530,82 +74535,82 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + @@ -74615,22 +74620,22 @@ - - + + - - + + - - + + @@ -74638,8 +74643,8 @@ - - + + @@ -74651,8 +74656,8 @@ - - + + @@ -74662,69 +74667,69 @@ - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -74742,15 +74747,15 @@ - - + + - - + + @@ -74760,8 +74765,8 @@ - - + + @@ -74773,46 +74778,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -74821,11 +74826,11 @@ - + - - + + @@ -74841,53 +74846,53 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -74898,382 +74903,382 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - - - + + + - + - - - - + + + + - + - - - - + + + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + - - - - + + - - - + + + - - + + - + - - + + - + - - + + - + - + - - + + - - + + - - - - - - + + + + + + - - + + - - - - - + + + + + - - - - - + + + + + - - - - - - + + + + + + - - + + - - + + - - - - + + + + - - - + + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - - - - - - - - - - + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -75281,276 +75286,276 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + + + + + + + + + - - - - - + + + - - - + + + - - + + + + + + + + + + + - + + + - - - + + + + - - - - - - - - - - - - - - + + - - + + - - - + + + - - + + - - - - - - - + + + + + + + - + - + - - + + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -75559,65 +75564,65 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + @@ -75626,1253 +75631,817 @@ - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - + + + + + + - - + + - + - - + + - - + + - + - + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - + - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - + - - + + - - - + + + - - + + - - + + - - + + - + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - - - + + + - - + + - + - + - - - - + + + + - - + + - - - + + + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - - + + - + - - - - + + + + - - + + - + - + - + - - - + + + - - - - - + + + + + - - - - - + + + + + - + - - + + - - + + + - - - - + + + + - - + + - + - + - - + + - + - + - - - - - - - + + + + + + + - - - + + + - - - + + + - - - - + + + + - - - - - + + + + + - - - + + + - - - + + + - - - - - + + + + + - - - - + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - - + + - + - - - - + + + + - - - - + + + + - - - - - + + + + + - + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - + - - + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - + + + - - + - - + + - - - + + + - - + + - - + + - - - - - - + + + + + + - - + + - + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -76881,110 +76450,655 @@ - - - - - - - - - - + + + + - - - - + + + + + + + - - - - - - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - + - - - + + + - - - - - + + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -76993,193 +77107,193 @@ - + - + - + - - + + - + - - - + + + - - - - - - + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -77187,655 +77301,647 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - - - + + + + - - + + - + - - + + - - + + - - - - + + + + - - - - - + + + + + - - + + - - + + - - + + - - - + + + - - - + + + - + - - + + - - + + - - + + - - + + - + - - - + + + - - - - - + + + + + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - - + + - + - + - - - + + + - - + + - + - - + + - - + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - - + + + + - - - - - - - - - - + + - + - - + + - - + + - - - - + + + + - + - - + + - - + + - - - + + + - + - - + + - - + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - + + + + + + + + + + - + - - - - + + + + - + - - - - - + + + + + - + - + - - - - - + + + + + - - + + - - + + - + - + - + - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -77844,52 +77950,52 @@ - - - - - - - + - + + + + + + + - - + + - - - + + + - - - - + + + + - - + + - - - - + + + + - + - - - + + + @@ -77897,51 +78003,51 @@ - - + + - - + + - + - - + + - - - + + + - + - - - - - - + + + + + + - - - + + + - - - - + + + + - - + + @@ -77951,205 +78057,205 @@ - - - + + + - - - + + + - - - - - - - + + + - - + + - - - + + + + + + + - - - + + + - - + + - + - - - - + + + + - + - + - - - + + + - - + + - - - - + + + + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - - + + - - - - - + + + + + - - + + - - - - + + + + - - - - + + + + - - - + + + - + - + - + - + - - + + - - - - + + + + - + - + - + - + - + - + - - + + @@ -78166,122 +78272,122 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - + + + + + + - - - - + + + + - - + + - - - - + + + + - - - + + + - + - - + + - + - - - + + + - - - - - + + + + + - - - - - - + + + + + + - - + + @@ -78443,332 +78549,332 @@ - - + + - - + + - - + + - - + + - - + + - - - - - - + + + + + + - - - - - - - + + + + + + + - + - + - + - - + + - - - + + + - - - - - - + + + + + + - - - + + + - - - + + + - - + + - + - - + + - - + + - - + + - - + + - - - + + + - + - - - + + + - - + + - - + + - - + + - - + + - - - - - - + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - + + - - + + - + - + - + - + - + - + - - - + + + - + - - + + - - - - + + + + - + - - - - - - + + + + + + - - - - - + + + + + - - - - - - - - - + + + + + + + + + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -78777,204 +78883,204 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - + - - - + + + - - + + - - - - + + + + - - - + + + - - - - + + + + - - - - - - - - + + - - - - - + + + + + + + + + + + - - - + + + - - - + + + - - + + - + - - - + + + - - - + + + - + - + - + @@ -78983,48 +79089,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -79033,313 +79139,313 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - - + + + - + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - - + + + - - - + + + - - - - - - - + + + + + + + - + - - - - + + + + - + - + - - - + + + - - - + + + - - + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - + + + + - - + + - - + + - - + + @@ -79348,428 +79454,428 @@ - - - + + + - - + + - - - + + + - - - - - + + + + + - - - + + + - + - + - + - + - + - + - - + + - + - - + + - - - + + + - - + + - - + + - + - + - - + + - + - - - + + + - - - - + + + + - + - - + + - + - - - + + + - - + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - + - - - - + + + + - - + + - - + + - - + + - - + + - - - + + + - - + + - + - - + + - + - + - - - - + + + + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - - - + + + - - + + - - + + - - - + + + - + - + - + - + - + - + - + - - - + + + - - + + - - + + - - - + + + - - + + - - - - - - + + + + + + - + - + - + - + - + - + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - - + + + - + - + - + - + @@ -79778,366 +79884,366 @@ - - + + - - - + + + - + - - + + - - - - - + + + + + - + - + - + - - - + + + - - - + + + - - - + + + - - - - + + + + + + - - - + - - - + + + - - + + - - + + - + - - + + - + - + - + - + - + - + - - + + - - - + + + - - - + + + - - - - + + + + - - + + - + - - + + - + - + - + - + - + - - - - + + + + - + - + - - + + - - - + + + - - + + - + - + - - - + + + - - + + - + - - + + - + - - - + + + - + - - + + - - + + - + - + - + - + - + - + - - + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - + - - - - + + + + - + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - + + + - - - + + + - - + + - - + + - + - + @@ -80148,7 +80254,7 @@ - + @@ -80169,28 +80275,28 @@ - - - - - - - + + + + + + + - - - - - + + + + + - - - + + + - + @@ -80198,39 +80304,39 @@ - + - + - - + + - - - + + + - - - + + + - - + + - + @@ -80238,12 +80344,12 @@ - - + + - - + + @@ -80270,1152 +80376,1152 @@ - + - + - - + + - + - - + + - + - - + + - - + + - - + + - + - - + + - - + + - + - - + + - + - - + + - + - + - - + + - - + + - + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - - + + - - + + - + - - + + - + - + - + - - + + - + - + - - + + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - + - - + + - - + + - + - + - - + + - + - + - - + + - - + + - + - - + + - - + + - - + + - - + + - + - + - + - - + + - + - - + + - - + + - + - + - + - + - - + + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -81424,43 +81530,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -81470,84 +81576,84 @@ - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -81559,108 +81665,108 @@ - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -81668,30 +81774,30 @@ - + - + - + - + - + - + - + - + - + @@ -81703,73 +81809,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -81778,34 +81884,34 @@ - + - + - + - + - + - + - + - + - + @@ -81817,81 +81923,81 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -81900,13 +82006,13 @@ - + - + - + @@ -81915,84 +82021,84 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -82001,19 +82107,19 @@ - + - + - + - + - + @@ -82022,33 +82128,33 @@ - + - + - + - + - + - + - + - + - + - + @@ -82072,152 +82178,152 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -82226,7 +82332,7 @@ - + @@ -82235,149 +82341,149 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -82410,312 +82516,312 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + @@ -82727,203 +82833,203 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - + @@ -82932,24 +83038,24 @@ - + - + - + - + - + - + - + @@ -82957,87 +83063,87 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -83046,159 +83152,159 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -83207,174 +83313,174 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -83386,123 +83492,123 @@ - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -83514,35 +83620,35 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -83551,22 +83657,22 @@ - + - + - + - + - + - + @@ -83575,52 +83681,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -83629,101 +83735,101 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -83735,134 +83841,134 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -83871,65 +83977,65 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - - + + - + - + @@ -83937,48 +84043,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -83987,62 +84093,62 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -84051,38 +84157,38 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + @@ -84091,418 +84197,418 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -84523,7 +84629,7 @@ - + @@ -84580,7 +84686,7 @@ - + @@ -84616,7 +84722,7 @@ - + @@ -84709,19 +84815,19 @@ - + - + - + - + @@ -84730,22 +84836,22 @@ - + - + - + - + - + - + @@ -84766,45 +84872,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -84813,80 +84919,80 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -84898,327 +85004,327 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85269,10 +85375,10 @@ - + - + @@ -85311,151 +85417,151 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85473,117 +85579,117 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85595,287 +85701,287 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85889,92 +85995,92 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85983,314 +86089,314 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -86299,39 +86405,39 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -86340,507 +86446,507 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + @@ -86924,10 +87030,10 @@ - + - + @@ -86939,36 +87045,36 @@ - + - + - + - + - + - + - + - + - + - - + + - + @@ -86977,25 +87083,25 @@ - + - + - + - + - + - - - - + + + + @@ -87018,124 +87124,124 @@ - + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -87147,70 +87253,70 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -87219,59 +87325,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -87280,7 +87386,7 @@ - + @@ -87289,245 +87395,245 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -87536,164 +87642,164 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -87704,73 +87810,73 @@ - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -87778,16 +87884,16 @@ - - + + - + - + - + @@ -87798,7 +87904,7 @@ - + @@ -87815,7 +87921,7 @@ - + @@ -87840,7 +87946,7 @@ - + @@ -87957,7 +88063,7 @@ - + @@ -87966,13 +88072,13 @@ - + - + - + @@ -87980,117 +88086,117 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -88105,18 +88211,18 @@ - + - + - + - + - + @@ -88125,156 +88231,156 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -88303,15 +88409,15 @@ - + - + - + @@ -88340,45 +88446,45 @@ - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -88389,15 +88495,15 @@ - + - + - + - + @@ -88406,166 +88512,166 @@ - - - + + + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -88574,494 +88680,494 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -89069,87 +89175,87 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -89161,1637 +89267,1637 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + - - + + - - - - + + + + - - + + - + - - - + + + - - - + + + - - - - - + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - + + + + + + + + + + + + + + - - - + + - - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - + + - - - + + - - - + + + - + + - - - - + + - - - - - - + + + + - - - - - + + + + - - + - - + + + - + + + + + + + - - - + + + + - - - - - - - - - - + + + + + + - - + + + + + - + + - + + - - - - - - - + - - + + - - - - - - - - + + + + + + + + + + - - + + - - + - - - - - - + - + + - + + - + + + + + - - - - - + + + + + + - + + + + + + + - + + + + + + - - - + - - - + - + - - + + + + + - - - - - - - - - - + - - + - - - + + + - - + + + - - - + - - + + - - - + + + + + + + + + + - - + + - + + + - + + - - - - + + + + + + + + - - - - - - - + + + - - + + - + + + + + - - + + + + + - - - - - + + + - - + + + + - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - + + + + - - - - - + + + + - - - - - - - + + - - - - - - + + + + - - - + + - - + + + - - - + + + + - - - - - - - - - - + + + + - + + + + + + + - - - + + + + + + - - + + + - - - + + + + + + + - - + + + + - - - + + + + - - - + + + + + + - - + + - - - - - - - - - + + + - - + + - - - - + + + - - - - - - - - + + + - - + + - - - + + + + + - - - + + + - - + + - - - + + + + - - - - + + + - - - - - + + + - - + + - - - - + + + - - - - - + + - - - - - - + + - - - + + + - - - - - + + + + - - - - - - + + + + + - - - + + - - - - - - + + + + - - - - - + + + + + - - + + + + + + - - - - + + + - - - - + + + + + - - - - - - + + + + + + - - + + + - - - - + + + + + + - - + + + + + - - + + - - - + + + + - - + + + + - - - + + + + + + - - + + - - + + + + - - + + - - + + - - - + + + - - - + + - - - - + + + - - - + + - - + + - - - + + - - - - - - - - + + - - - + + + - - - - + + + - - - - + + + + - - + + + + + + + - - - + + + + + + + + + + + + + - - - - + + + + + + + + + - - - - + + + + - - - + + + - - - + + + - + + - + - - - - - - - - + + + + - - + + - - - - - - + + + - - - + + - - + - - - - + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - - - - + + + + - - - + + + - - + + - - + + - - + + - + - - + + - - - - + + + + - - + + - + - - + + - + - + - - + + - + - - - + + + - + - - + + - + - + - + - + - + - + - + - + - - - - + + + + - + - - + + - - - + + + - + - - + + - - + + - - + + - + - - + + - + - + - + - - + + - - - - + + + + - - - - - + + + + + - - - + + + - - + + - - + + - - + + - + - - - + + + - - + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -90799,219 +90905,227 @@ - + - + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - + + + + - - + + - + - - - - + + + + - - + + - - - + + + - - - - - + + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - - - - - - + + + + + + + - - + + - - + + - + - - + + - - - - + + + + - - - + + + - - - + + + - + - - - - + + + + - - - + + + - - - - + + + + - + - - - + + + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - + @@ -91028,7 +91142,7 @@ - + @@ -91037,486 +91151,486 @@ - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - - - - + + + + - - + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - + + + + + + + + + - - - - + + + + - - + + - - + + - - - - + + + + - - - + + + - - - + + + - - + + - - + + - - + + - - - - + + + + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - + + + - - + + - + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - - + + + - + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - - + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -91525,29 +91639,29 @@ - + - + - + - + - + - + - + - + - + @@ -91559,7 +91673,7 @@ - + @@ -91568,24 +91682,24 @@ - + - + - + - + - + - + - + @@ -91597,13 +91711,13 @@ - + - + - + @@ -91612,1313 +91726,1321 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - + + + + + + - - - + + + - - - + + + - + - - + + - + - + - - + + - + - - + + - + - - + + - - + + - - + + - - + + - - + + - + - - - - + + + + - - - + + + - - + + - - + + - + - - + + - + - + - + - - + + - - + + - - - + + + - - - - - + + + + + - + - + - + - + - + - + - + - + - - - - + + + + - - - + + + - - - - + + + + - + - - + + - + - - - + + + - + - - + + - - + + - + - - + + - - - + + + - - - + + + - + - - - + + + - + - - + + - - + + - - + + - - + + - + - - - - + + + + - - - - + + + + - + - + - + - + - + - + - + - - - - + + + + - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - - + + + - - - - - - - + + + + + + + - - - + + + - + - + - - - + + + - + - + - + - + - + - - - + + + - - - - + + + + - + - - - + + + - + - - + + - - - - + + + + - + - - + + - - - + + + - - + + - - - + + + - - + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - + + + + + - - + + - - - + + + - - - - - - + + + + + + - - - - - + + + + + - - - + + + - - + + - + - - + + - - - + + + - + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - + - - + + - + - - + + - - + + - + - - - + + + - + - - + + - + - - + + - - - + + + - - + + - - + + - + - - - + + + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - - - + + + + - - - + + + - - + + - - + + - - - + + + - + - + - + - + - + - + - + - + - + - - - - - - + + + + + + - - + + - - - - + + + + - - - - + + + + - - - - - - + + + + + + - - + + - + - - - - + + + + - - - + + + - + - - - - - - + + + + + + - + - - + + - - + + - + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - + + - - - - + + + + - + - - + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - + + - - + + - - + + - + - + - - - + + + - - - + + + - - + + - - + + - - - + + + - - + + - - - + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - - + + - - + + - - - - + + + + - - - + + + - - + + - + - + - + - + - - - - + + + + - - - - - - + + + + + + - + - - + + - - - - + + + + - - + + - - + + - - + + - - - - + + + + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -92927,129 +93049,129 @@ - + - - - - + + + + - - + + - - - - + + + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - + - + - - - + + + - - + + - - + + - - - - - + + + + + - - + + - - - + + + - - + + @@ -93086,144 +93208,152 @@ - - - - + + + + - - + + - - + + - - + + - - + + - - + + - + - - + + - + - - - + + + - + - + - - - - + - + - + - + + + + - + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -93235,22 +93365,22 @@ - + - + - + - + - + @@ -93280,58 +93410,58 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -93343,81 +93473,81 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + @@ -93426,37 +93556,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -93468,10 +93598,10 @@ - + - + @@ -93483,28 +93613,28 @@ - + - + - + - + - + - + @@ -93519,13 +93649,13 @@ - + - + - + @@ -93534,49 +93664,49 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -93585,16 +93715,16 @@ - + - + - + - + @@ -93609,37 +93739,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -93660,10 +93790,10 @@ - + - + @@ -93672,67 +93802,67 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -93741,79 +93871,79 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -93822,112 +93952,112 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -93936,156 +94066,156 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + @@ -94117,21 +94247,21 @@ - + - + - + - + - + - + @@ -94140,27 +94270,27 @@ - + - + - + - + - + - + - + - + @@ -94178,10 +94308,10 @@ - + - + @@ -94190,107 +94320,107 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -94308,7 +94438,7 @@ - + @@ -94323,31 +94453,31 @@ - + - + - + - + - + - + - + - + @@ -94356,13 +94486,13 @@ - + - + - + @@ -94380,49 +94510,49 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -94431,7 +94561,7 @@ - + @@ -94449,7 +94579,7 @@ - + @@ -94461,338 +94591,338 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - - - + + + - - - + + + - - - - + + + + - - + + - - - + + + - - - + + + - - - - + + + + - - - + + + - + - + - - + + - - - - + + + + - - - + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - + + + - - - + + + - - + + + - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - + + + + - + - + - + - + - - + + @@ -94804,742 +94934,742 @@ - + - + - + - + - - - - + + + + - + - + - - - - - - + + + + + + - + - - + + - - + + - - + + - + - - + + - + - - + + - - + + - + - - - - + + + + - - - + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - + - + - + - + - - - + + + - - + + - - - + + + - - + + - - + + - - - + + + - - - - + + + + - - + + - - - + + + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - - - + + + + - - + + - + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - + - - - + + + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - - - + + + + + - + - + - - + + - + - - - + + + - - + + - - - + + + - + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + - - + + - - + + - - + + - - - + + + - - + + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - - - + + + - - + + - - + + - - + + - - + + - + - + - + - + - - - - - - + + + + + + - - + + - - + + - - + + - - - - + + + + - - + + - - - - - - - + + + + + + + - - + + - + - - - - + + + + - - + + - + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - + - - - + + + @@ -95549,590 +95679,582 @@ - + - - + + - - + + - - + + - + - - - + + + - - + + - - - - - + + + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - + - - + + - - + + - + - - - - + + + + - - - - + + + + - + - - + + - + - + - - + + - + - + - + - + - - - + + + - + - - - + + + - + - + - - + + - + - + - - - + + + - - + + - + - - + + - - + + - - + + - + - + - + + + + + + + - + - + - - - - - - - - - - - - - - - + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - - + + + - + - + - + - + - + - + - - - + + + - - - + + + - - - + + + - - - - + + + + - + - + - + - + - + - + - + - - - + + + - - + + - - - + + + - - + + - + - - + + - - - - + + + + - + - - - - - - - + + + + + + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + @@ -96147,10 +96269,10 @@ - + - + @@ -96158,35 +96280,35 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -96195,33 +96317,33 @@ - + - + - + - + - + - + - + - + - + - + @@ -96230,13 +96352,13 @@ - + - + - + @@ -96262,60 +96384,60 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -96326,9 +96448,9 @@ - + - + @@ -96349,24 +96471,24 @@ - + - + - + - + - + - + - + @@ -96377,7 +96499,7 @@ - + @@ -96391,84 +96513,84 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -96476,7 +96598,7 @@ - + @@ -96485,264 +96607,256 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - + + + + - + - - - + + + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - + + + + - + - - - + + + - + - - - + + + - - + + - - - - - - - - - - - + + + - + - - - + + + - + - + - + - - + + - + - + - + - + - - - + + + - + - - - + + + - - + + - + - - - + + + - - + + - - + + - - - + + + - + - + - - - + + + @@ -96750,82 +96864,82 @@ - - - - + + + + - - - - + + + + - - - - + + + + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + @@ -96840,75 +96954,75 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -96917,1066 +97031,1066 @@ - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -97985,1267 +98099,1267 @@ - + - + - + - + - + - + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - + - + - + - - + + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - + + + + + - - - - + + + + - - + + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + - - - + + + + + - - - - + + - - - + + - - - + + + - - - - + + - - - + + + - - - + + + - - - - - + + + + - - - + + + - - - + + + + - - - + + + - - - - - + + + - - - - - - - + + + + - - - + + + - - - + + + - - - - + + + + + - - - + + - - - + + + - - + + + - - - + + + + + - - - + + + + + + + + + + + + + - - + + + + - - - - + + + + + - - - + + + + + - - - + + + + - - - + + + - - + + + + - - - - - - - - + + + + - - - - + + - - - - + + + + - - - - - - - + + + - - - - + + + - - - + + + - - - + + - - - - + + + - - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + + + + - - - - - + + + + - - - - - + + + - - - - - + + + - - - - + + + + - - - - + + + + - - - - - - - + + + + + + - - - + - - - - - + + + + - - - - - + + + + + - - - - + + + + + - - - - + + + + + - - - - + + + + - - - - + + + + - - - - + + + + + + + - - - - - + + + + - - - - - + + + + + - - - - + + + + + - - - - + + + + - - - - - + + + + - - - + + + + - - - + + + + - - - - - - + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - + + - - - - - + + + + + - - - + + + - - + + - - + + - + - + - + - + - + - - - - + + + + - + - - + + - - - + + + - - - - + + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - - - - + + + + + - - - + + + - - - + + + - - - - + + + + - - - - - - + + + + + + - + - - + + - + - + - + - + - - + + - - + + - - - - - + + + + + - - - - - + + + + + - - + + - - - - - + + + + + - - - + + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + @@ -99258,205 +99372,205 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -99466,239 +99580,239 @@ - - + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - + + + - - + + + + + - - - + + + + + + + + + + + + + + + + + - - + + - + - + - + - + - - - - - + + + + + - + - - + + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - - + + @@ -99706,384 +99820,384 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - + + - - + + + + + + - + - + - - + + - + - - + + + - - + - - - - - - - + + + + + + + - - + + - - + + - + - + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + + + + - - - + + + + + + + + - - - + + + + + + - - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - + + - - - - + + + + - - - + + + - - - - + + + + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -100098,351 +100212,400 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + + + + + + + - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - + + - - + + - - - + + + - - - - - + + + + + - - - - - - + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - + + + - + - - - + + + - - - + + + - + - - - - + + + + - - - - + + + + - - - - - - + + + + + + - - - + + + - - + + - - + + - + - + - - + + - - + + - + - - - + + + - - - - + + + + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - - - + + + - - + + - + - + - - - - + + + - - + + - - + + + + + - + - + - - + + - + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + @@ -100451,15 +100614,15 @@ - + - + - + - + @@ -100468,7 +100631,7 @@ - + @@ -100482,35 +100645,91 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + @@ -100527,589 +100746,464 @@ - + - + - + - + - + - + - + - - + + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + + + + + + + + - - + + - + - + - - - + + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + - - + + - - + + - + - - + + - - + + - - + + - - - - + + + + - - - - + + + + - - - + + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - + + - - - + + + - + - - - + + + - - - + + + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -101118,98 +101212,98 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -101227,27 +101321,27 @@ - + - + - + - + - + - + - + - + @@ -101258,47 +101352,47 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -101307,54 +101401,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -101365,7 +101459,7 @@ - + @@ -101376,231 +101470,231 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -101609,38 +101703,38 @@ - + - + - + - + - + - + - + - + - + - + - - + + @@ -101657,23 +101751,23 @@ - + - + - + - + - + - + @@ -101682,123 +101776,123 @@ - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -101810,10 +101904,10 @@ - + - + @@ -101822,57 +101916,57 @@ - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -101882,16 +101976,16 @@ - + - + - + - - + + @@ -101905,43 +101999,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -101950,306 +102044,306 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -102269,27 +102363,27 @@ - + - + - + - + - + - + - + - + @@ -102297,401 +102391,401 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -102700,177 +102794,177 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -102883,160 +102977,160 @@ - - + + - + - + - + - - + + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -103044,206 +103138,206 @@ - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -103251,253 +103345,253 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -103508,10 +103602,10 @@ - + - + @@ -103520,334 +103614,334 @@ - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - - + + @@ -103855,1435 +103949,1435 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - + + + - + - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - + + + + - - - - - + + + + - - - - - - + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + + + + + + + + - - - - + + + + + + + - - - + + + + + - - - - + + + + + + + + - - - - - + + + + + - - - - + + + + + + - - - - - - - - + + + - - - - + + - - - - - + + + - - - - + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - + + + - - - + + + - + - - - - + + + + - + - + - + - - + + @@ -105429,8 +105523,8 @@ - - + + @@ -105717,744 +105811,744 @@ - - + + - + - + - + - + - + - + - + - - - - - + + + + + - - + + - - - + + + - - - + + + - + - + - - - - + + + + - - - - - - + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - + + + + + - - - - - + + + + + - + - - - - + + + + - - - + + + - - - - - - + + + + + + - - - + + + - - + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - - - + + + - - - + + + - + - - - + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + - - + + @@ -106468,142 +106562,142 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - - + + - - - - + + + + - - - - + + + + - - - - - - - + + + + + + + - + - + - + - + - - - + + + - - - - - - - + + + + + + + - + @@ -106611,310 +106705,318 @@ - + - + - - + + - - + + - - + + - - - - - + + + + + - - + + - + - - + + - - + + - - + + - - + + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + - - + + - - + + - + - - + + - - - - - - + + + + + + - - - + + + - - + + - - - - + + + + - - + + - + - - + + - - - - + + + + - - - + + + - - - + + + - + - + - + - + - + - + - - + + - - - + + + - - - - + + + + @@ -106927,438 +107029,438 @@ - + - - + + - + - - + + - + - - + + - - + + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + - - - + + + - - - - + + + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + @@ -107375,15 +107477,15 @@ - + - + - + @@ -107392,49 +107494,49 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -107443,150 +107545,150 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - + + + + + + - + - - + + - - - + + + - + - - - - - + + + + + - + - - + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - + + - + - - - - + + + + - - - - - + + + + + - + - - + + - + - + - + - + - + @@ -107595,20 +107697,20 @@ - + - + - + - + - - + + @@ -107624,237 +107726,237 @@ - - - + + + - - + + - - - + + + - - + + - + - + - - - + + + - + - + - + - + - - + + - - - + + + - + - - + + - - + + - - - + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - + + + + + + - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - + - + - - + + - + - - - + + + - - + + - - + + - + - - + + - - - + + + - - + + - - + + - + - - + + - + - - + + @@ -107862,73 +107964,73 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -107937,782 +108039,782 @@ - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - + + + + - - - + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - - - + + + + - + - - + + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + @@ -108724,154 +108826,154 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + @@ -108879,7 +108981,7 @@ - + @@ -108914,37 +109016,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -108959,7 +109061,7 @@ - + @@ -108970,7 +109072,7 @@ - + @@ -108978,23 +109080,23 @@ - + - + - + - + - + @@ -109011,7 +109113,7 @@ - + @@ -109031,13 +109133,13 @@ - + - + - + @@ -109045,21 +109147,21 @@ - + - + - + - + @@ -109080,122 +109182,122 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -109204,28 +109306,28 @@ - + - + - + - + - + - + - + - - + + @@ -109237,261 +109339,261 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -109532,277 +109634,277 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -109823,297 +109925,297 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -110124,9 +110226,9 @@ - + - + @@ -110147,84 +110249,84 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -110233,963 +110335,963 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - - + + - - + + - - + + - + - - - + + + - - - + + + - - - + + + - + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - - - - + + + + + - - - - - + + + + + - - + + - - - - - + + + + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + + - - + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - + + + - - - - - - - - - - - - - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + - - - + + + - + + + + - + + - - + + - - - - - + + + - - - - + + - - + + + - - - - - + + - - - - - + + + - - - - - + - - + - + + + - - + + + + - - + + + + - + + - - + + + + + - - + + + + + - - + + + + + - - - + + + - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - + + + - - - - - + + + + + - - - - - + + + + + - - + + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - - - - + + + + - - + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - + - + - + - + - + - + - + - + - + @@ -111201,159 +111303,159 @@ - + - + - + - + - + - + - + - - + + - - + + - - - + + + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - + - + - + - - + + - - - + + + - - + + - + - - + + - - + + - + - + - + - + - + - + @@ -111365,94 +111467,94 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -111461,77 +111563,77 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -111546,126 +111648,126 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -111676,9 +111778,9 @@ - + - + @@ -111690,28 +111792,28 @@ - + - + - + - + - + - + - + - + @@ -111720,76 +111822,76 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -111801,24 +111903,24 @@ - + - + - + - + - + - + - + @@ -111827,21 +111929,21 @@ - + - + - + - + - + @@ -111852,76 +111954,76 @@ - + - + - + - + - + - + - + - - - - - - - - - - + + + + + + + + + + - - - - - - + + + + + + - - - - - + - - + + + + + + - + - + - + - + - + - + - + - + From 91358d0f36fa1b671572dce6e1f28505bf758402 Mon Sep 17 00:00:00 2001 From: Prabhath Sajeepa Date: Mon, 9 Mar 2020 15:07:53 -0600 Subject: [PATCH 028/136] nvme-rdma: Avoid double freeing of async event data [ Upstream commit 9134ae2a2546cb96abddcd4469a79c77ee3a4480 ] The timeout of identify cmd, which is invoked as part of admin queue creation, can result in freeing of async event data both in nvme_rdma_timeout handler and error handling path of nvme_rdma_configure_admin queue thus causing NULL pointer reference. Call Trace: ? nvme_rdma_setup_ctrl+0x223/0x800 [nvme_rdma] nvme_rdma_create_ctrl+0x2ba/0x3f7 [nvme_rdma] nvmf_dev_write+0xa54/0xcc6 [nvme_fabrics] __vfs_write+0x1b/0x40 vfs_write+0xb2/0x1b0 ksys_write+0x61/0xd0 __x64_sys_write+0x1a/0x20 do_syscall_64+0x60/0x1e0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 Reviewed-by: Roland Dreier Reviewed-by: Max Gurtovoy Reviewed-by: Christoph Hellwig Signed-off-by: Prabhath Sajeepa Signed-off-by: Keith Busch Signed-off-by: Sasha Levin --- drivers/nvme/host/rdma.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c index 4ff51da3b13f..73e8475ddc8a 100644 --- a/drivers/nvme/host/rdma.c +++ b/drivers/nvme/host/rdma.c @@ -850,9 +850,11 @@ static int nvme_rdma_configure_admin_queue(struct nvme_rdma_ctrl *ctrl, if (new) blk_mq_free_tag_set(ctrl->ctrl.admin_tagset); out_free_async_qe: - nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe, - sizeof(struct nvme_command), DMA_TO_DEVICE); - ctrl->async_event_sqe.data = NULL; + if (ctrl->async_event_sqe.data) { + nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe, + sizeof(struct nvme_command), DMA_TO_DEVICE); + ctrl->async_event_sqe.data = NULL; + } out_free_queue: nvme_rdma_free_queue(&ctrl->queues[0]); return error; From 205b5f80c74f48a864edc8c6910a40d0e06f6d58 Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Tue, 10 Mar 2020 19:12:49 +0900 Subject: [PATCH 029/136] kconfig: introduce m32-flag and m64-flag [ Upstream commit 8cc4fd73501d9f1370c3eebb70cfe8cc9e24062b ] When a compiler supports multiple architectures, some compiler features can be dependent on the target architecture. This is typical for Clang, which supports multiple LLVM backends. Even for GCC, we need to take care of biarch compiler cases. It is not a problem when we evaluate cc-option in Makefiles because cc-option is tested against the flag in question + $(KBUILD_CFLAGS). The cc-option in Kconfig, on the other hand, does not accumulate tested flags. Due to this simplification, it could potentially test cc-option against a different target. At first, Kconfig always evaluated cc-option against the host architecture. Since commit e8de12fb7cde ("kbuild: Check for unknown options with cc-option usage in Kconfig and clang"), in case of cross-compiling with Clang, the target triple is correctly passed to Kconfig. The case with biarch GCC (and native build with Clang) is still not handled properly. We need to pass some flags to specify the target machine bit. Due to the design, all the macros in Kconfig are expanded in the parse stage, where we do not know the target bit size yet. For example, arch/x86/Kconfig allows a user to toggle CONFIG_64BIT. If a compiler flag -foo depends on the machine bit, it must be tested twice, one with -m32 and the other with -m64. However, -m32/-m64 are not always recognized. So, this commits adds m64-flag and m32-flag macros. They expand to -m32, -m64, respectively if supported. Or, they expand to an empty string if unsupported. The typical usage is like this: config FOO bool default $(cc-option,$(m64-flag) -foo) if 64BIT default $(cc-option,$(m32-flag) -foo) This is clumsy, but there is no elegant way to handle this in the current static macro expansion. There was discussion for static functions vs dynamic functions. The consensus was to go as far as possible with the static functions. (https://lkml.org/lkml/2018/3/2/22) Signed-off-by: Masahiro Yamada Tested-by: George Spelvin Reviewed-by: Nathan Chancellor Signed-off-by: Sasha Levin --- scripts/Kconfig.include | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include index bfb44b265a94..77a69ba9cd19 100644 --- a/scripts/Kconfig.include +++ b/scripts/Kconfig.include @@ -40,3 +40,10 @@ $(error-if,$(success, $(LD) -v | grep -q gold), gold linker '$(LD)' not supporte # gcc version including patch level gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh $(CC)) + +# machine bit flags +# $(m32-flag): -m32 if the compiler supports it, or an empty string otherwise. +# $(m64-flag): -m64 if the compiler supports it, or an empty string otherwise. +cc-option-bit = $(if-success,$(CC) -Werror $(1) -E -x c /dev/null -o /dev/null,$(1)) +m32-flag := $(cc-option-bit,-m32) +m64-flag := $(cc-option-bit,-m64) From f8abcff4fd0db7c54b9c48e1202e9f7660098573 Mon Sep 17 00:00:00 2001 From: Mario Kleiner Date: Fri, 28 Feb 2020 22:36:07 +0100 Subject: [PATCH 030/136] drm/amd/display: Add link_rate quirk for Apple 15" MBP 2017 [ Upstream commit dec9de2ada523b344eb2428abfedf9d6cd0a0029 ] This fixes a problem found on the MacBookPro 2017 Retina panel: The panel reports 10 bpc color depth in its EDID, and the firmware chooses link settings at boot which support enough bandwidth for 10 bpc (324000 kbit/sec aka LINK_RATE_RBR2 aka 0xc), but the DP_MAX_LINK_RATE dpcd register only reports 2.7 Gbps (multiplier value 0xa) as possible, in direct contradiction of what the firmware successfully set up. This restricts the panel to 8 bpc, not providing the full color depth of the panel on Linux <= 5.5. Additionally, commit '4a8ca46bae8a ("drm/amd/display: Default max bpc to 16 for eDP")' introduced into Linux 5.6-rc1 will unclamp panel depth to its full 10 bpc, thereby requiring a eDP bandwidth for all modes that exceeds the bandwidth available and causes all modes to fail validation -> No modes for the laptop panel -> failure to set any mode -> Panel goes dark. This patch adds a quirk specific to the MBP 2017 15" Retina panel to override reported max link rate to the correct maximum of 0xc = LINK_RATE_RBR2 to fix the darkness and reduced display precision. Please apply for Linux 5.6+ to avoid regressing Apple MBP panel support. Signed-off-by: Mario Kleiner Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c index 0ab890c927ec..6dd2334dd5e6 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c @@ -2879,6 +2879,17 @@ static bool retrieve_link_cap(struct dc_link *link) sink_id.ieee_device_id, sizeof(sink_id.ieee_device_id)); + /* Quirk Apple MBP 2017 15" Retina panel: Wrong DP_MAX_LINK_RATE */ + { + uint8_t str_mbp_2017[] = { 101, 68, 21, 101, 98, 97 }; + + if ((link->dpcd_caps.sink_dev_id == 0x0010fa) && + !memcmp(link->dpcd_caps.sink_dev_id_str, str_mbp_2017, + sizeof(str_mbp_2017))) { + link->reported_link_cap.link_rate = 0x0c; + } + } + core_link_read_dpcd( link, DP_SINK_HW_REVISION_START, From 4a8ba74c1c64842b27e9ad42e238a994ae0dd3e5 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 13 Mar 2020 09:41:52 +0100 Subject: [PATCH 031/136] drm/bochs: downgrade pci_request_region failure from error to warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit 8c34cd1a7f089dc03933289c5d4a4d1489549828 ] Shutdown of firmware framebuffer has a bunch of problems. Because of this the framebuffer region might still be reserved even after drm_fb_helper_remove_conflicting_pci_framebuffers() returned. Don't consider pci_request_region() failure for the framebuffer region as fatal error to workaround this issue. Reported-by: Marek Marczykowski-Górecki Signed-off-by: Gerd Hoffmann Acked-by: Sam Ravnborg Link: http://patchwork.freedesktop.org/patch/msgid/20200313084152.2734-1-kraxel@redhat.com Signed-off-by: Sasha Levin --- drivers/gpu/drm/bochs/bochs_hw.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/bochs/bochs_hw.c b/drivers/gpu/drm/bochs/bochs_hw.c index e567bdfa2ab8..bb1391784caf 100644 --- a/drivers/gpu/drm/bochs/bochs_hw.c +++ b/drivers/gpu/drm/bochs/bochs_hw.c @@ -156,10 +156,8 @@ int bochs_hw_init(struct drm_device *dev) size = min(size, mem); } - if (pci_request_region(pdev, 0, "bochs-drm") != 0) { - DRM_ERROR("Cannot request framebuffer\n"); - return -EBUSY; - } + if (pci_request_region(pdev, 0, "bochs-drm") != 0) + DRM_WARN("Cannot request framebuffer, boot fb still active?\n"); bochs->fb_map = ioremap(addr, size); if (bochs->fb_map == NULL) { From d2faee42f9e7dbe147de6d049e33ee9de51b404d Mon Sep 17 00:00:00 2001 From: Eugeniy Paltsev Date: Mon, 16 Mar 2020 14:25:19 +0300 Subject: [PATCH 032/136] initramfs: restore default compression behavior [ Upstream commit 785d74ec3bbf26ac7f6e92e6e96a259aec0f107a ] Even though INITRAMFS_SOURCE kconfig option isn't set in most of defconfigs it is used (set) extensively by various build systems. Commit f26661e12765 ("initramfs: make initramfs compression choice non-optional") has changed default compression mode. Previously we compress initramfs using available compression algorithm. Now we don't use any compression at all by default. It significantly increases the image size in case of build system chooses embedded initramfs. Initially I faced with this issue while using buildroot. As of today it's not possible to set preferred compression mode in target defconfig as this option depends on INITRAMFS_SOURCE being set. Modification of all build systems either doesn't look like good option. Let's instead rewrite initramfs compression mode choices list the way that "INITRAMFS_COMPRESSION_NONE" will be the last option in the list. In that case it will be chosen only if all other options (which implements any compression) are not available. Signed-off-by: Eugeniy Paltsev Signed-off-by: Masahiro Yamada Signed-off-by: Sasha Levin --- usr/Kconfig | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/usr/Kconfig b/usr/Kconfig index a6b68503d177..a80cc7972274 100644 --- a/usr/Kconfig +++ b/usr/Kconfig @@ -131,17 +131,6 @@ choice If in doubt, select 'None' -config INITRAMFS_COMPRESSION_NONE - bool "None" - help - Do not compress the built-in initramfs at all. This may sound wasteful - in space, but, you should be aware that the built-in initramfs will be - compressed at a later stage anyways along with the rest of the kernel, - on those architectures that support this. However, not compressing the - initramfs may lead to slightly higher memory consumption during a - short time at boot, while both the cpio image and the unpacked - filesystem image will be present in memory simultaneously - config INITRAMFS_COMPRESSION_GZIP bool "Gzip" depends on RD_GZIP @@ -214,6 +203,17 @@ config INITRAMFS_COMPRESSION_LZ4 If you choose this, keep in mind that most distros don't provide lz4 by default which could cause a build failure. +config INITRAMFS_COMPRESSION_NONE + bool "None" + help + Do not compress the built-in initramfs at all. This may sound wasteful + in space, but, you should be aware that the built-in initramfs will be + compressed at a later stage anyways along with the rest of the kernel, + on those architectures that support this. However, not compressing the + initramfs may lead to slightly higher memory consumption during a + short time at boot, while both the cpio image and the unpacked + filesystem image will be present in memory simultaneously + endchoice config INITRAMFS_COMPRESSION From 7ebc1e53a46b5256438988bfec15a50b941b04f1 Mon Sep 17 00:00:00 2001 From: James Zhu Date: Wed, 18 Mar 2020 17:09:05 -0400 Subject: [PATCH 033/136] drm/amdgpu: fix typo for vcn1 idle check [ Upstream commit acfc62dc68770aa665cc606891f6df7d6d1e52c0 ] fix typo for vcn1 idle check Signed-off-by: James Zhu Reviewed-by: Leo Liu Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c index 93b3500e522b..4f0f0de83293 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c @@ -1375,7 +1375,7 @@ static int vcn_v1_0_set_clockgating_state(void *handle, if (enable) { /* wait for STATUS to clear */ - if (vcn_v1_0_is_idle(handle)) + if (!vcn_v1_0_is_idle(handle)) return -EBUSY; vcn_v1_0_enable_clock_gating(adev); } else { From 0ba0ce3cbb866e1b8fe688a89a73a6d3861490a5 Mon Sep 17 00:00:00 2001 From: Len Brown Date: Thu, 19 Mar 2020 18:33:12 -0400 Subject: [PATCH 034/136] tools/power turbostat: Fix gcc build warnings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit d8d005ba6afa502ca37ced5782f672c4d2fc1515 ] Warning: ‘__builtin_strncpy’ specified bound 20 equals destination size [-Wstringop-truncation] reduce param to strncpy, to guarantee that a null byte is always copied into destination buffer. Signed-off-by: Len Brown Signed-off-by: Sasha Levin --- tools/power/x86/turbostat/turbostat.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c index 5d0fddda842c..78507cd479bb 100644 --- a/tools/power/x86/turbostat/turbostat.c +++ b/tools/power/x86/turbostat/turbostat.c @@ -5323,9 +5323,9 @@ int add_counter(unsigned int msr_num, char *path, char *name, } msrp->msr_num = msr_num; - strncpy(msrp->name, name, NAME_BYTES); + strncpy(msrp->name, name, NAME_BYTES - 1); if (path) - strncpy(msrp->path, path, PATH_BYTES); + strncpy(msrp->path, path, PATH_BYTES - 1); msrp->width = width; msrp->type = type; msrp->format = format; From 09116eeea6a50b98e9d64b08659d7441eebfbff3 Mon Sep 17 00:00:00 2001 From: Len Brown Date: Thu, 19 Mar 2020 18:26:05 -0400 Subject: [PATCH 035/136] tools/power turbostat: Fix missing SYS_LPI counter on some Chromebooks [ Upstream commit 1f81c5efc020314b2db30d77efe228b7e117750d ] Some Chromebook BIOS' do not export an ACPI LPIT, which is how Linux finds the residency counter for CPU and SYSTEM low power states, that is exports in /sys/devices/system/cpu/cpuidle/*residency_us When these sysfs attributes are missing, check the debugfs attrubte from the pmc_core driver, which accesses the same counter value. Signed-off-by: Len Brown Signed-off-by: Sasha Levin --- tools/power/x86/turbostat/turbostat.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c index 78507cd479bb..17e82eaf5c4f 100644 --- a/tools/power/x86/turbostat/turbostat.c +++ b/tools/power/x86/turbostat/turbostat.c @@ -304,6 +304,10 @@ int *irqs_per_cpu; /* indexed by cpu_num */ void setup_all_buffers(void); +char *sys_lpi_file; +char *sys_lpi_file_sysfs = "/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us"; +char *sys_lpi_file_debugfs = "/sys/kernel/debug/pmc_core/slp_s0_residency_usec"; + int cpu_is_not_present(int cpu) { return !CPU_ISSET_S(cpu, cpu_present_setsize, cpu_present_set); @@ -2916,8 +2920,6 @@ int snapshot_gfx_mhz(void) * * record snapshot of * /sys/devices/system/cpu/cpuidle/low_power_idle_cpu_residency_us - * - * return 1 if config change requires a restart, else return 0 */ int snapshot_cpu_lpi_us(void) { @@ -2941,17 +2943,14 @@ int snapshot_cpu_lpi_us(void) /* * snapshot_sys_lpi() * - * record snapshot of - * /sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us - * - * return 1 if config change requires a restart, else return 0 + * record snapshot of sys_lpi_file */ int snapshot_sys_lpi_us(void) { FILE *fp; int retval; - fp = fopen_or_die("/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us", "r"); + fp = fopen_or_die(sys_lpi_file, "r"); retval = fscanf(fp, "%lld", &cpuidle_cur_sys_lpi_us); if (retval != 1) { @@ -4907,10 +4906,16 @@ void process_cpuid() else BIC_NOT_PRESENT(BIC_CPU_LPI); - if (!access("/sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us", R_OK)) + if (!access(sys_lpi_file_sysfs, R_OK)) { + sys_lpi_file = sys_lpi_file_sysfs; BIC_PRESENT(BIC_SYS_LPI); - else + } else if (!access(sys_lpi_file_debugfs, R_OK)) { + sys_lpi_file = sys_lpi_file_debugfs; + BIC_PRESENT(BIC_SYS_LPI); + } else { + sys_lpi_file_sysfs = NULL; BIC_NOT_PRESENT(BIC_SYS_LPI); + } if (!quiet) decode_misc_feature_control(); From 8792e1ac5f48dc07da98ecaa8ee9e8abedec4549 Mon Sep 17 00:00:00 2001 From: Len Brown Date: Thu, 19 Mar 2020 23:24:17 -0400 Subject: [PATCH 036/136] tools/power turbostat: Fix 32-bit capabilities warning [ Upstream commit fcaa681c03ea82193e60d7f2cdfd94fbbcd4cae9 ] warning: `turbostat' uses 32-bit capabilities (legacy support in use) Signed-off-by: Len Brown Signed-off-by: Sasha Levin --- tools/power/x86/turbostat/Makefile | 2 +- tools/power/x86/turbostat/turbostat.c | 48 +++++++++++++++++---------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/tools/power/x86/turbostat/Makefile b/tools/power/x86/turbostat/Makefile index 13f1e8b9ac52..2b6551269e43 100644 --- a/tools/power/x86/turbostat/Makefile +++ b/tools/power/x86/turbostat/Makefile @@ -16,7 +16,7 @@ override CFLAGS += -D_FORTIFY_SOURCE=2 %: %.c @mkdir -p $(BUILD_OUTPUT) - $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS) + $(CC) $(CFLAGS) $< -o $(BUILD_OUTPUT)/$@ $(LDFLAGS) -lcap .PHONY : clean clean : diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c index 17e82eaf5c4f..988326b67a91 100644 --- a/tools/power/x86/turbostat/turbostat.c +++ b/tools/power/x86/turbostat/turbostat.c @@ -30,7 +30,7 @@ #include #include #include -#include +#include #include #include @@ -3150,27 +3150,41 @@ void check_dev_msr() err(-5, "no /dev/cpu/0/msr, Try \"# modprobe msr\" "); } -void check_permissions() +/* + * check for CAP_SYS_RAWIO + * return 0 on success + * return 1 on fail + */ +int check_for_cap_sys_rawio(void) +{ + cap_t caps; + cap_flag_value_t cap_flag_value; + + caps = cap_get_proc(); + if (caps == NULL) + err(-6, "cap_get_proc\n"); + + if (cap_get_flag(caps, CAP_SYS_RAWIO, CAP_EFFECTIVE, &cap_flag_value)) + err(-6, "cap_get\n"); + + if (cap_flag_value != CAP_SET) { + warnx("capget(CAP_SYS_RAWIO) failed," + " try \"# setcap cap_sys_rawio=ep %s\"", progname); + return 1; + } + + if (cap_free(caps) == -1) + err(-6, "cap_free\n"); + + return 0; +} +void check_permissions(void) { - struct __user_cap_header_struct cap_header_data; - cap_user_header_t cap_header = &cap_header_data; - struct __user_cap_data_struct cap_data_data; - cap_user_data_t cap_data = &cap_data_data; - extern int capget(cap_user_header_t hdrp, cap_user_data_t datap); int do_exit = 0; char pathname[32]; /* check for CAP_SYS_RAWIO */ - cap_header->pid = getpid(); - cap_header->version = _LINUX_CAPABILITY_VERSION; - if (capget(cap_header, cap_data) < 0) - err(-6, "capget(2) failed"); - - if ((cap_data->effective & (1 << CAP_SYS_RAWIO)) == 0) { - do_exit++; - warnx("capget(CAP_SYS_RAWIO) failed," - " try \"# setcap cap_sys_rawio=ep %s\"", progname); - } + do_exit += check_for_cap_sys_rawio(); /* test file permissions */ sprintf(pathname, "/dev/cpu/%d/msr", base_cpu); From 4eb33cb9b56666ee59b291caab046588dd6b66eb Mon Sep 17 00:00:00 2001 From: Tariq Toukan Date: Thu, 20 Feb 2020 13:40:24 +0200 Subject: [PATCH 037/136] net/mlx5e: kTLS, Fix TCP seq off-by-1 issue in TX resync flow [ Upstream commit 56917766def72f5afdf4235adb91b6897ff26d9d ] We have an off-by-1 issue in the TCP seq comparison. The last sequence number that belongs to the TCP packet's payload is not "start_seq + len", but one byte before it. Fix it so the 'ends_before' is evaluated properly. This fixes a bug that results in error completions in the kTLS HW offload flows. Fixes: ffbd9ca94e2e ("net/mlx5e: kTLS, Fix corner-case checks in TX resync flow") Signed-off-by: Tariq Toukan Reviewed-by: Boris Pismenny Signed-off-by: Saeed Mahameed Signed-off-by: Sasha Levin --- drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c index f260dd96873b..52a56622034a 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_tx.c @@ -218,7 +218,7 @@ tx_sync_info_get(struct mlx5e_ktls_offload_context_tx *priv_tx, * this packet was already acknowledged and its record info * was released. */ - ends_before = before(tcp_seq + datalen, tls_record_start_seq(record)); + ends_before = before(tcp_seq + datalen - 1, tls_record_start_seq(record)); if (unlikely(tls_record_is_start_marker(record))) { ret = ends_before ? MLX5E_KTLS_SYNC_SKIP_NO_DATA : MLX5E_KTLS_SYNC_FAIL; From 16696ee7b58101c90bf21c3ab2443c57df4af24e Mon Sep 17 00:00:00 2001 From: "Matthew Wilcox (Oracle)" Date: Fri, 31 Jan 2020 05:07:55 -0500 Subject: [PATCH 038/136] XArray: Fix xa_find_next for large multi-index entries [ Upstream commit bd40b17ca49d7d110adf456e647701ce74de2241 ] Coverity pointed out that xas_sibling() was shifting xa_offset without promoting it to an unsigned long first, so the shift could cause an overflow and we'd get the wrong answer. The fix is obvious, and the new test-case provokes UBSAN to report an error: runtime error: shift exponent 60 is too large for 32-bit type 'int' Fixes: 19c30f4dd092 ("XArray: Fix xa_find_after with multi-index entries") Reported-by: Bjorn Helgaas Reported-by: Kees Cook Signed-off-by: Matthew Wilcox (Oracle) Cc: stable@vger.kernel.org Signed-off-by: Sasha Levin --- lib/test_xarray.c | 18 ++++++++++++++++++ lib/xarray.c | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/test_xarray.c b/lib/test_xarray.c index 55c14e8c8859..8c7d7a8468b8 100644 --- a/lib/test_xarray.c +++ b/lib/test_xarray.c @@ -12,6 +12,9 @@ static unsigned int tests_run; static unsigned int tests_passed; +static const unsigned int order_limit = + IS_ENABLED(CONFIG_XARRAY_MULTI) ? BITS_PER_LONG : 1; + #ifndef XA_DEBUG # ifdef __KERNEL__ void xa_dump(const struct xarray *xa) { } @@ -959,6 +962,20 @@ static noinline void check_multi_find_2(struct xarray *xa) } } +static noinline void check_multi_find_3(struct xarray *xa) +{ + unsigned int order; + + for (order = 5; order < order_limit; order++) { + unsigned long index = 1UL << (order - 5); + + XA_BUG_ON(xa, !xa_empty(xa)); + xa_store_order(xa, 0, order - 4, xa_mk_index(0), GFP_KERNEL); + XA_BUG_ON(xa, xa_find_after(xa, &index, ULONG_MAX, XA_PRESENT)); + xa_erase_index(xa, 0); + } +} + static noinline void check_find_1(struct xarray *xa) { unsigned long i, j, k; @@ -1081,6 +1098,7 @@ static noinline void check_find(struct xarray *xa) for (i = 2; i < 10; i++) check_multi_find_1(xa, i); check_multi_find_2(xa); + check_multi_find_3(xa); } /* See find_swap_entry() in mm/shmem.c */ diff --git a/lib/xarray.c b/lib/xarray.c index 1d9fab7db8da..acd1fad2e862 100644 --- a/lib/xarray.c +++ b/lib/xarray.c @@ -1839,7 +1839,8 @@ static bool xas_sibling(struct xa_state *xas) if (!node) return false; mask = (XA_CHUNK_SIZE << node->shift) - 1; - return (xas->xa_index & mask) > (xas->xa_offset << node->shift); + return (xas->xa_index & mask) > + ((unsigned long)xas->xa_offset << node->shift); } /** From 625b940a28e0e9e2bd040512cd2d00a044e17fd5 Mon Sep 17 00:00:00 2001 From: Daniel Jordan Date: Mon, 10 Feb 2020 13:11:00 -0500 Subject: [PATCH 039/136] padata: fix uninitialized return value in padata_replace() [ Upstream commit 41ccdbfd5427bbbf3ed58b16750113b38fad1780 ] According to Geert's report[0], kernel/padata.c: warning: 'err' may be used uninitialized in this function [-Wuninitialized]: => 539:2 Warning is seen only with older compilers on certain archs. The runtime effect is potentially returning garbage down the stack when padata's cpumasks are modified before any pcrypt requests have run. Simplest fix is to initialize err to the success value. [0] http://lkml.kernel.org/r/20200210135506.11536-1-geert@linux-m68k.org Reported-by: Geert Uytterhoeven Fixes: bbefa1dd6a6d ("crypto: pcrypt - Avoid deadlock by using per-instance padata queues") Signed-off-by: Daniel Jordan Cc: Herbert Xu Cc: Steffen Klassert Cc: linux-crypto@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Herbert Xu Signed-off-by: Sasha Levin --- kernel/padata.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/padata.c b/kernel/padata.c index fda7a7039422..7bd37dd9ec55 100644 --- a/kernel/padata.c +++ b/kernel/padata.c @@ -516,7 +516,7 @@ static int padata_replace(struct padata_instance *pinst) { int notification_mask = 0; struct padata_shell *ps; - int err; + int err = 0; pinst->flags |= PADATA_RESET; From cec4be18d1367ec9c57222e4b3ab96d22a60b029 Mon Sep 17 00:00:00 2001 From: Guenter Roeck Date: Tue, 28 Jan 2020 14:14:57 -0800 Subject: [PATCH 040/136] brcmfmac: abort and release host after error [ Upstream commit 863844ee3bd38219c88e82966d1df36a77716f3e ] With commit 216b44000ada ("brcmfmac: Fix use after free in brcmf_sdio_readframes()") applied, we see locking timeouts in brcmf_sdio_watchdog_thread(). brcmfmac: brcmf_escan_timeout: timer expired INFO: task brcmf_wdog/mmc1:621 blocked for more than 120 seconds. Not tainted 4.19.94-07984-g24ff99a0f713 #1 "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. brcmf_wdog/mmc1 D 0 621 2 0x00000000 last_sleep: 2440793077. last_runnable: 2440766827 [] (__schedule) from [] (schedule+0x98/0xc4) [] (schedule) from [] (__mmc_claim_host+0x154/0x274) [] (__mmc_claim_host) from [] (brcmf_sdio_watchdog_thread+0x1b0/0x1f8 [brcmfmac]) [] (brcmf_sdio_watchdog_thread [brcmfmac]) from [] (kthread+0x178/0x180) In addition to restarting or exiting the loop, it is also necessary to abort the command and to release the host. Fixes: 216b44000ada ("brcmfmac: Fix use after free in brcmf_sdio_readframes()") Cc: Dan Carpenter Cc: Matthias Kaehlcke Cc: Brian Norris Cc: Douglas Anderson Signed-off-by: Guenter Roeck Reviewed-by: Douglas Anderson Acked-by: franky.lin@broadcom.com Acked-by: Dan Carpenter Signed-off-by: Kalle Valo Signed-off-by: Sasha Levin --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c index a935993a3c51..d43247a95ce5 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c @@ -1934,6 +1934,8 @@ static uint brcmf_sdio_readframes(struct brcmf_sdio *bus, uint maxframes) if (brcmf_sdio_hdparse(bus, bus->rxhdr, &rd_new, BRCMF_SDIO_FT_NORMAL)) { rd->len = 0; + brcmf_sdio_rxfail(bus, true, true); + sdio_release_host(bus->sdiodev->func1); brcmu_pkt_buf_free_skb(pkt); continue; } From 82f6c72e5d4d2b7de81e88c20b460bf3bd868869 Mon Sep 17 00:00:00 2001 From: YueHaibing Date: Thu, 26 Mar 2020 11:26:18 +0800 Subject: [PATCH 041/136] misc: rtsx: set correct pcr_ops for rts522A commit 10cea23b6aae15e8324f4101d785687f2c514fe5 upstream. rts522a should use rts522a_pcr_ops, which is diffrent with rts5227 in phy/hw init setting. Fixes: ce6a5acc9387 ("mfd: rtsx: Add support for rts522A") Signed-off-by: YueHaibing Cc: stable Link: https://lore.kernel.org/r/20200326032618.20472-1-yuehaibing@huawei.com Signed-off-by: Greg Kroah-Hartman --- drivers/misc/cardreader/rts5227.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/misc/cardreader/rts5227.c b/drivers/misc/cardreader/rts5227.c index 423fecc19fc4..3a9467aaa435 100644 --- a/drivers/misc/cardreader/rts5227.c +++ b/drivers/misc/cardreader/rts5227.c @@ -394,6 +394,7 @@ static const struct pcr_ops rts522a_pcr_ops = { void rts522a_init_params(struct rtsx_pcr *pcr) { rts5227_init_params(pcr); + pcr->ops = &rts522a_pcr_ops; pcr->tx_initial_phase = SET_CLOCK_PHASE(20, 20, 11); pcr->reg_pm_ctrl3 = RTS522A_PM_CTRL3; From a5d697c1e92d3f096c3d3b543fe3a74a48894bf7 Mon Sep 17 00:00:00 2001 From: Kishon Vijay Abraham I Date: Tue, 17 Mar 2020 15:31:57 +0530 Subject: [PATCH 042/136] misc: pci_endpoint_test: Fix to support > 10 pci-endpoint-test devices commit 6b443e5c80b67a7b8a85b33d052d655ef9064e90 upstream. Adding more than 10 pci-endpoint-test devices results in "kobject_add_internal failed for pci-endpoint-test.1 with -EEXIST, don't try to register things with the same name in the same directory". This is because commit 2c156ac71c6b ("misc: Add host side PCI driver for PCI test function device") limited the length of the "name" to 20 characters. Change the length of the name to 24 in order to support upto 10000 pci-endpoint-test devices. Fixes: 2c156ac71c6b ("misc: Add host side PCI driver for PCI test function device") Signed-off-by: Kishon Vijay Abraham I Signed-off-by: Lorenzo Pieralisi Cc: stable@vger.kernel.org # v4.14+ Signed-off-by: Greg Kroah-Hartman --- drivers/misc/pci_endpoint_test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c index 6e208a060a58..be144b4938cc 100644 --- a/drivers/misc/pci_endpoint_test.c +++ b/drivers/misc/pci_endpoint_test.c @@ -633,7 +633,7 @@ static int pci_endpoint_test_probe(struct pci_dev *pdev, { int err; int id; - char name[20]; + char name[24]; enum pci_barno bar; void __iomem *base; struct device *dev = &pdev->dev; From aa98c16a5b7c0894bbe48989bf987b2d3f39f38f Mon Sep 17 00:00:00 2001 From: Kishon Vijay Abraham I Date: Tue, 17 Mar 2020 15:31:54 +0530 Subject: [PATCH 043/136] misc: pci_endpoint_test: Avoid using module parameter to determine irqtype commit b2ba9225e0313b1de631a44b7b48c109032bffec upstream. commit e03327122e2c ("pci_endpoint_test: Add 2 ioctl commands") uses module parameter 'irqtype' in pci_endpoint_test_set_irq() to check if IRQ vectors of a particular type (MSI or MSI-X or LEGACY) is already allocated. However with multi-function devices, 'irqtype' will not correctly reflect the IRQ type of the PCI device. Fix it here by adding 'irqtype' for each PCI device to show the IRQ type of a particular PCI device. Fixes: e03327122e2c ("pci_endpoint_test: Add 2 ioctl commands") Signed-off-by: Kishon Vijay Abraham I Signed-off-by: Lorenzo Pieralisi Cc: stable@vger.kernel.org # v4.19+ Signed-off-by: Greg Kroah-Hartman --- drivers/misc/pci_endpoint_test.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c index be144b4938cc..1154f0435b0a 100644 --- a/drivers/misc/pci_endpoint_test.c +++ b/drivers/misc/pci_endpoint_test.c @@ -98,6 +98,7 @@ struct pci_endpoint_test { struct completion irq_raised; int last_irq; int num_irqs; + int irq_type; /* mutex to protect the ioctls */ struct mutex mutex; struct miscdevice miscdev; @@ -157,6 +158,7 @@ static void pci_endpoint_test_free_irq_vectors(struct pci_endpoint_test *test) struct pci_dev *pdev = test->pdev; pci_free_irq_vectors(pdev); + test->irq_type = IRQ_TYPE_UNDEFINED; } static bool pci_endpoint_test_alloc_irq_vectors(struct pci_endpoint_test *test, @@ -191,6 +193,8 @@ static bool pci_endpoint_test_alloc_irq_vectors(struct pci_endpoint_test *test, irq = 0; res = false; } + + test->irq_type = type; test->num_irqs = irq; return res; @@ -330,6 +334,7 @@ static bool pci_endpoint_test_copy(struct pci_endpoint_test *test, size_t size) dma_addr_t orig_dst_phys_addr; size_t offset; size_t alignment = test->alignment; + int irq_type = test->irq_type; u32 src_crc32; u32 dst_crc32; @@ -426,6 +431,7 @@ static bool pci_endpoint_test_write(struct pci_endpoint_test *test, size_t size) dma_addr_t orig_phys_addr; size_t offset; size_t alignment = test->alignment; + int irq_type = test->irq_type; u32 crc32; if (size > SIZE_MAX - alignment) @@ -494,6 +500,7 @@ static bool pci_endpoint_test_read(struct pci_endpoint_test *test, size_t size) dma_addr_t orig_phys_addr; size_t offset; size_t alignment = test->alignment; + int irq_type = test->irq_type; u32 crc32; if (size > SIZE_MAX - alignment) @@ -555,7 +562,7 @@ static bool pci_endpoint_test_set_irq(struct pci_endpoint_test *test, return false; } - if (irq_type == req_irq_type) + if (test->irq_type == req_irq_type) return true; pci_endpoint_test_release_irq(test); @@ -567,12 +574,10 @@ static bool pci_endpoint_test_set_irq(struct pci_endpoint_test *test, if (!pci_endpoint_test_request_irq(test)) goto err; - irq_type = req_irq_type; return true; err: pci_endpoint_test_free_irq_vectors(test); - irq_type = IRQ_TYPE_UNDEFINED; return false; } @@ -652,6 +657,7 @@ static int pci_endpoint_test_probe(struct pci_dev *pdev, test->test_reg_bar = 0; test->alignment = 0; test->pdev = pdev; + test->irq_type = IRQ_TYPE_UNDEFINED; if (no_msi) irq_type = IRQ_TYPE_LEGACY; From b5212116392e0dd50bdf868a2d94b289e5f123c4 Mon Sep 17 00:00:00 2001 From: Kelsey Skunberg Date: Wed, 25 Mar 2020 09:17:08 -0600 Subject: [PATCH 044/136] PCI: sysfs: Revert "rescan" file renames commit bd641fd8303a371e789e924291086268256766b0 upstream. We changed these sysfs filenames: .../pci_bus//rescan -> .../pci_bus//bus_rescan ...//rescan -> ...//dev_rescan and Ruslan reported [1] that this broke a userspace application. Revert these name changes so both files are named "rescan" again. Note that we have to use __ATTR() to assign custom C symbols, i.e., "struct device_attribute ". [1] https://lore.kernel.org/r/CAB=otbSYozS-ZfxB0nCiNnxcbqxwrHOSYxJJtDKa63KzXbXgpw@mail.gmail.com [bhelgaas: commit log, use __ATTR() both places so we don't have to rename the attributes] Fixes: 8bdfa145f582 ("PCI: sysfs: Define device attributes with DEVICE_ATTR*()") Fixes: 4e2b79436e4f ("PCI: sysfs: Change DEVICE_ATTR() to DEVICE_ATTR_WO()") Link: https://lore.kernel.org/r/20200325151708.32612-1-skunberg.kelsey@gmail.com Signed-off-by: Kelsey Skunberg Signed-off-by: Bjorn Helgaas Reviewed-by: Greg Kroah-Hartman Cc: stable@vger.kernel.org # v5.4+ Signed-off-by: Greg Kroah-Hartman --- drivers/pci/pci-sysfs.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index 793412954529..e401f040f157 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c @@ -464,7 +464,8 @@ static ssize_t dev_rescan_store(struct device *dev, } return count; } -static DEVICE_ATTR_WO(dev_rescan); +static struct device_attribute dev_attr_dev_rescan = __ATTR(rescan, 0200, NULL, + dev_rescan_store); static ssize_t remove_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) @@ -501,7 +502,8 @@ static ssize_t bus_rescan_store(struct device *dev, } return count; } -static DEVICE_ATTR_WO(bus_rescan); +static struct device_attribute dev_attr_bus_rescan = __ATTR(rescan, 0200, NULL, + bus_rescan_store); #if defined(CONFIG_PM) && defined(CONFIG_ACPI) static ssize_t d3cold_allowed_store(struct device *dev, From 1843cba24aefd799701d35ea4c0dc3b467f6eaa7 Mon Sep 17 00:00:00 2001 From: Eugene Syromiatnikov Date: Tue, 24 Mar 2020 05:22:13 +0100 Subject: [PATCH 045/136] coresight: do not use the BIT() macro in the UAPI header commit 9b6eaaf3db5e5888df7bca7fed7752a90f7fd871 upstream. The BIT() macro definition is not available for the UAPI headers (moreover, it can be defined differently in the user space); replace its usage with the _BITUL() macro that is defined in . Fixes: 237483aa5cf4 ("coresight: stm: adding driver for CoreSight STM component") Signed-off-by: Eugene Syromiatnikov Cc: stable Reviewed-by: Mathieu Poirier Link: https://lore.kernel.org/r/20200324042213.GA10452@asgard.redhat.com Signed-off-by: Greg Kroah-Hartman --- include/uapi/linux/coresight-stm.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/uapi/linux/coresight-stm.h b/include/uapi/linux/coresight-stm.h index aac550a52f80..8847dbf24151 100644 --- a/include/uapi/linux/coresight-stm.h +++ b/include/uapi/linux/coresight-stm.h @@ -2,8 +2,10 @@ #ifndef __UAPI_CORESIGHT_STM_H_ #define __UAPI_CORESIGHT_STM_H_ -#define STM_FLAG_TIMESTAMPED BIT(3) -#define STM_FLAG_GUARANTEED BIT(7) +#include + +#define STM_FLAG_TIMESTAMPED _BITUL(3) +#define STM_FLAG_GUARANTEED _BITUL(7) /* * The CoreSight STM supports guaranteed and invariant timing From 98b32db072e9a2096e953eaff4ac94e8fa564514 Mon Sep 17 00:00:00 2001 From: Alexander Usyskin Date: Tue, 24 Mar 2020 23:07:30 +0200 Subject: [PATCH 046/136] mei: me: add cedar fork device ids commit 99397d33b763dc554d118aaa38cc5abc6ce985de upstream. Add Cedar Fork (CDF) device ids, those belongs to the cannon point family. Cc: Signed-off-by: Alexander Usyskin Signed-off-by: Tomas Winkler Link: https://lore.kernel.org/r/20200324210730.17672-1-tomas.winkler@intel.com Signed-off-by: Greg Kroah-Hartman --- drivers/misc/mei/hw-me-regs.h | 2 ++ drivers/misc/mei/pci-me.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h index 69d9b1736bf9..e56dc4754064 100644 --- a/drivers/misc/mei/hw-me-regs.h +++ b/drivers/misc/mei/hw-me-regs.h @@ -87,6 +87,8 @@ #define MEI_DEV_ID_CMP_H 0x06e0 /* Comet Lake H */ #define MEI_DEV_ID_CMP_H_3 0x06e4 /* Comet Lake H 3 (iTouch) */ +#define MEI_DEV_ID_CDF 0x18D3 /* Cedar Fork */ + #define MEI_DEV_ID_ICP_LP 0x34E0 /* Ice Lake Point LP */ #define MEI_DEV_ID_TGP_LP 0xA0E0 /* Tiger Lake Point LP */ diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c index 309cb8a23381..75ab2ffbf235 100644 --- a/drivers/misc/mei/pci-me.c +++ b/drivers/misc/mei/pci-me.c @@ -109,6 +109,8 @@ static const struct pci_device_id mei_me_pci_tbl[] = { {MEI_PCI_DEVICE(MEI_DEV_ID_MCC, MEI_ME_PCH12_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_MCC_4, MEI_ME_PCH8_CFG)}, + {MEI_PCI_DEVICE(MEI_DEV_ID_CDF, MEI_ME_PCH8_CFG)}, + /* required last entry */ {0, } }; From 4d60b72514c2dbedf145225ea8b9ed1efed3d116 Mon Sep 17 00:00:00 2001 From: Nicholas Johnson Date: Tue, 10 Mar 2020 13:22:52 +0000 Subject: [PATCH 047/136] nvmem: check for NULL reg_read and reg_write before dereferencing commit 3c91ef69a3e94f78546b246225ed573fbf1735b4 upstream. Return -EPERM if reg_read is NULL in bin_attr_nvmem_read() or if reg_write is NULL in bin_attr_nvmem_write(). This prevents NULL dereferences such as the one described in 03cd45d2e219 ("thunderbolt: Prevent crash if non-active NVMem file is read") Signed-off-by: Nicholas Johnson Cc: stable Signed-off-by: Srinivas Kandagatla Link: https://lore.kernel.org/r/20200310132257.23358-10-srinivas.kandagatla@linaro.org Signed-off-by: Greg Kroah-Hartman --- drivers/nvmem/nvmem-sysfs.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/nvmem/nvmem-sysfs.c b/drivers/nvmem/nvmem-sysfs.c index 9e0c429cd08a..8759c4470012 100644 --- a/drivers/nvmem/nvmem-sysfs.c +++ b/drivers/nvmem/nvmem-sysfs.c @@ -56,6 +56,9 @@ static ssize_t bin_attr_nvmem_read(struct file *filp, struct kobject *kobj, count = round_down(count, nvmem->word_size); + if (!nvmem->reg_read) + return -EPERM; + rc = nvmem->reg_read(nvmem->priv, pos, buf, count); if (rc) @@ -90,6 +93,9 @@ static ssize_t bin_attr_nvmem_write(struct file *filp, struct kobject *kobj, count = round_down(count, nvmem->word_size); + if (!nvmem->reg_write) + return -EPERM; + rc = nvmem->reg_write(nvmem->priv, pos, buf, count); if (rc) From 899c38d9300014a38d8f60b7cd4f57e939b37274 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Mon, 23 Mar 2020 22:59:39 +0100 Subject: [PATCH 048/136] extcon: axp288: Add wakeup support commit 9c94553099efb2ba873cbdddfd416a8a09d0e5f1 upstream. On devices with an AXP288, we need to wakeup from suspend when a charger is plugged in, so that we can do charger-type detection and so that the axp288-charger driver, which listens for our extcon events, can configure the input-current-limit accordingly. Cc: stable@vger.kernel.org Signed-off-by: Hans de Goede Signed-off-by: Chanwoo Choi Signed-off-by: Greg Kroah-Hartman --- drivers/extcon/extcon-axp288.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/extcon/extcon-axp288.c b/drivers/extcon/extcon-axp288.c index 415afaf479e7..0840c0f1bf2e 100644 --- a/drivers/extcon/extcon-axp288.c +++ b/drivers/extcon/extcon-axp288.c @@ -423,9 +423,40 @@ static int axp288_extcon_probe(struct platform_device *pdev) /* Start charger cable type detection */ axp288_extcon_enable(info); + device_init_wakeup(dev, true); + platform_set_drvdata(pdev, info); + return 0; } +static int __maybe_unused axp288_extcon_suspend(struct device *dev) +{ + struct axp288_extcon_info *info = dev_get_drvdata(dev); + + if (device_may_wakeup(dev)) + enable_irq_wake(info->irq[VBUS_RISING_IRQ]); + + return 0; +} + +static int __maybe_unused axp288_extcon_resume(struct device *dev) +{ + struct axp288_extcon_info *info = dev_get_drvdata(dev); + + /* + * Wakeup when a charger is connected to do charger-type + * connection and generate an extcon event which makes the + * axp288 charger driver set the input current limit. + */ + if (device_may_wakeup(dev)) + disable_irq_wake(info->irq[VBUS_RISING_IRQ]); + + return 0; +} + +static SIMPLE_DEV_PM_OPS(axp288_extcon_pm_ops, axp288_extcon_suspend, + axp288_extcon_resume); + static const struct platform_device_id axp288_extcon_table[] = { { .name = "axp288_extcon" }, {}, @@ -437,6 +468,7 @@ static struct platform_driver axp288_extcon_driver = { .id_table = axp288_extcon_table, .driver = { .name = "axp288_extcon", + .pm = &axp288_extcon_pm_ops, }, }; From 7c6ae8ae0ac557cb8928271ebb444a8bd3e4677f Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Sun, 23 Feb 2020 16:32:08 +0100 Subject: [PATCH 049/136] power: supply: axp288_charger: Add special handling for HP Pavilion x2 10 commit 9c80662a74cd2a5d1113f5c69d027face963a556 upstream. Some HP Pavilion x2 10 models use an AXP288 for charging and fuel-gauge. We use a native power_supply / PMIC driver in this case, because on most models with an AXP288 the ACPI AC / Battery code is either completely missing or relies on custom / proprietary ACPI OpRegions which Linux does not implement. The native drivers mostly work fine, but there are 2 problems: 1. These model uses a Type-C connector for charging which the AXP288 does not support. As long as a Type-A charger (which uses the USB data pins for charger type detection) is used everything is fine. But if a Type-C charger is used (such as the charger shipped with the device) then the charger is not recognized. So we end up slowly discharging the device even though a charger is connected, because we are limiting the current from the charger to 500mA. To make things worse this happens with the device's official charger. Looking at the ACPI tables HP has "solved" the problem of the AXP288 not being able to recognize Type-C chargers by simply always programming the input-current-limit at 3000mA and relying on a Vhold setting of 4.7V (normally 4.4V) to limit the current intake if the charger cannot handle this. 2. If no charger is connected when the machine boots then it boots with the vbus-path disabled. On other devices this is done when a 5V boost converter is active to avoid the PMIC trying to charge from the 5V boost output. This is done when an OTG host cable is inserted and the ID pin on the micro-B receptacle is pulled low, the ID pin has an ACPI event handler associated with it which re-enables the vbus-path when the ID pin is pulled high when the OTG cable is removed. The Type-C connector has no ID pin, there is no ID pin handler and there appears to be no 5V boost converter, so we end up not charging because the vbus-path is disabled, until we unplug the charger which automatically clears the vbus-path disable bit and then on the second plug-in of the adapter we start charging. The HP Pavilion x2 10 models with an AXP288 do have mostly working ACPI AC / Battery code which does not rely on custom / proprietary ACPI OpRegions. So one possible solution would be to blacklist the AXP288 native power_supply drivers and add the HP Pavilion x2 10 with AXP288 DMI ids to the list of devices which should use the ACPI AC / Battery code even though they have an AXP288 PMIC. This would require changes to 4 files: drivers/acpi/ac.c, drivers/power/supply/axp288_charger.c, drivers/acpi/battery.c and drivers/power/supply/axp288_fuel_gauge.c. Beside needing adding the same DMI matches to 4 different files, this approach also triggers problem 2. from above, but then when suspended, during suspend the machine will not wakeup because the vbus path is disabled by the AML code when not charging, so the Vbus low-to-high IRQ is not triggered, the CPU never wakes up and the device does not charge even though the user likely things it is charging, esp. since the charge status LED is directly coupled to an adapter being plugged in and does not reflect actual charging. This could be worked by enabling vbus-path explicitly from say the axp288_charger driver's suspend handler. So neither situation is ideal, in both cased we need to explicitly enable the vbus-path to work around different variants of problem 2 above, this requires a quirk in the axp288_charger code. If we go the route of using the ACPI AC / Battery drivers then we need modifications to 3 other drivers; and we need to partially disable the axp288_charger code, while at the same time keeping it around to enable vbus-path on suspend. OTOH we can copy the hardcoding of 3A input-current-limit (we never touch Vhold, so that would stay at 4.7V) to the axp288_charger code, which needs changes regardless, then we concentrate all special handling of this interesting device model in the axp288_charger code. That is what this commit does. Cc: stable@vger.kernel.org BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1791098 Signed-off-by: Hans de Goede Signed-off-by: Sebastian Reichel Signed-off-by: Greg Kroah-Hartman --- drivers/power/supply/axp288_charger.c | 57 ++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/drivers/power/supply/axp288_charger.c b/drivers/power/supply/axp288_charger.c index 1bbba6bba673..cf4c67b2d235 100644 --- a/drivers/power/supply/axp288_charger.c +++ b/drivers/power/supply/axp288_charger.c @@ -21,6 +21,7 @@ #include #include #include +#include #define PS_STAT_VBUS_TRIGGER BIT(0) #define PS_STAT_BAT_CHRG_DIR BIT(2) @@ -545,6 +546,49 @@ static irqreturn_t axp288_charger_irq_thread_handler(int irq, void *dev) return IRQ_HANDLED; } +/* + * The HP Pavilion x2 10 series comes in a number of variants: + * Bay Trail SoC + AXP288 PMIC, DMI_BOARD_NAME: "815D" + * Cherry Trail SoC + AXP288 PMIC, DMI_BOARD_NAME: "813E" + * Cherry Trail SoC + TI PMIC, DMI_BOARD_NAME: "827C" or "82F4" + * + * The variants with the AXP288 PMIC are all kinds of special: + * + * 1. All variants use a Type-C connector which the AXP288 does not support, so + * when using a Type-C charger it is not recognized. Unlike most AXP288 devices, + * this model actually has mostly working ACPI AC / Battery code, the ACPI code + * "solves" this by simply setting the input_current_limit to 3A. + * There are still some issues with the ACPI code, so we use this native driver, + * and to solve the charging not working (500mA is not enough) issue we hardcode + * the 3A input_current_limit like the ACPI code does. + * + * 2. If no charger is connected the machine boots with the vbus-path disabled. + * Normally this is done when a 5V boost converter is active to avoid the PMIC + * trying to charge from the 5V boost converter's output. This is done when + * an OTG host cable is inserted and the ID pin on the micro-B receptacle is + * pulled low and the ID pin has an ACPI event handler associated with it + * which re-enables the vbus-path when the ID pin is pulled high when the + * OTG host cable is removed. The Type-C connector has no ID pin, there is + * no ID pin handler and there appears to be no 5V boost converter, so we + * end up not charging because the vbus-path is disabled, until we unplug + * the charger which automatically clears the vbus-path disable bit and then + * on the second plug-in of the adapter we start charging. To solve the not + * charging on first charger plugin we unconditionally enable the vbus-path at + * probe on this model, which is safe since there is no 5V boost converter. + */ +static const struct dmi_system_id axp288_hp_x2_dmi_ids[] = { + { + /* + * Bay Trail model has "Hewlett-Packard" as sys_vendor, Cherry + * Trail model has "HP", so we only match on product_name. + */ + .matches = { + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion x2 Detachable"), + }, + }, + {} /* Terminating entry */ +}; + static void axp288_charger_extcon_evt_worker(struct work_struct *work) { struct axp288_chrg_info *info = @@ -568,7 +612,11 @@ static void axp288_charger_extcon_evt_worker(struct work_struct *work) } /* Determine cable/charger type */ - if (extcon_get_state(edev, EXTCON_CHG_USB_SDP) > 0) { + if (dmi_check_system(axp288_hp_x2_dmi_ids)) { + /* See comment above axp288_hp_x2_dmi_ids declaration */ + dev_dbg(&info->pdev->dev, "HP X2 with Type-C, setting inlmt to 3A\n"); + current_limit = 3000000; + } else if (extcon_get_state(edev, EXTCON_CHG_USB_SDP) > 0) { dev_dbg(&info->pdev->dev, "USB SDP charger is connected\n"); current_limit = 500000; } else if (extcon_get_state(edev, EXTCON_CHG_USB_CDP) > 0) { @@ -685,6 +733,13 @@ static int charger_init_hw_regs(struct axp288_chrg_info *info) return ret; } + if (dmi_check_system(axp288_hp_x2_dmi_ids)) { + /* See comment above axp288_hp_x2_dmi_ids declaration */ + ret = axp288_charger_vbus_path_select(info, true); + if (ret < 0) + return ret; + } + /* Read current charge voltage and current limit */ ret = regmap_read(info->regmap, AXP20X_CHRG_CTRL1, &val); if (ret < 0) { From 2892100bc85ae446088cebe0c00ba9b194c0ac9d Mon Sep 17 00:00:00 2001 From: Mike Snitzer Date: Thu, 2 Apr 2020 19:36:26 -0400 Subject: [PATCH 050/136] Revert "dm: always call blk_queue_split() in dm_process_bio()" commit 120c9257f5f19e5d1e87efcbb5531b7cd81b7d74 upstream. This reverts commit effd58c95f277744f75d6e08819ac859dbcbd351. blk_queue_split() is causing excessive IO splitting -- because blk_max_size_offset() depends on 'chunk_sectors' limit being set and if it isn't (as is the case for DM targets!) it falls back to splitting on a 'max_sectors' boundary regardless of offset. "Fix" this by reverting back to _not_ using blk_queue_split() in dm_process_bio() for normal IO (reads and writes). Long-term fix is still TBD but it should focus on training blk_max_size_offset() to call into a DM provided hook (to call DM's max_io_len()). Test results from simple misaligned IO test on 4-way dm-striped device with chunksize of 128K and stripesize of 512K: xfs_io -d -c 'pread -b 2m 224s 4072s' /dev/mapper/stripe_dev before this revert: 253,0 21 1 0.000000000 2206 Q R 224 + 4072 [xfs_io] 253,0 21 2 0.000008267 2206 X R 224 / 480 [xfs_io] 253,0 21 3 0.000010530 2206 X R 224 / 256 [xfs_io] 253,0 21 4 0.000027022 2206 X R 480 / 736 [xfs_io] 253,0 21 5 0.000028751 2206 X R 480 / 512 [xfs_io] 253,0 21 6 0.000033323 2206 X R 736 / 992 [xfs_io] 253,0 21 7 0.000035130 2206 X R 736 / 768 [xfs_io] 253,0 21 8 0.000039146 2206 X R 992 / 1248 [xfs_io] 253,0 21 9 0.000040734 2206 X R 992 / 1024 [xfs_io] 253,0 21 10 0.000044694 2206 X R 1248 / 1504 [xfs_io] 253,0 21 11 0.000046422 2206 X R 1248 / 1280 [xfs_io] 253,0 21 12 0.000050376 2206 X R 1504 / 1760 [xfs_io] 253,0 21 13 0.000051974 2206 X R 1504 / 1536 [xfs_io] 253,0 21 14 0.000055881 2206 X R 1760 / 2016 [xfs_io] 253,0 21 15 0.000057462 2206 X R 1760 / 1792 [xfs_io] 253,0 21 16 0.000060999 2206 X R 2016 / 2272 [xfs_io] 253,0 21 17 0.000062489 2206 X R 2016 / 2048 [xfs_io] 253,0 21 18 0.000066133 2206 X R 2272 / 2528 [xfs_io] 253,0 21 19 0.000067507 2206 X R 2272 / 2304 [xfs_io] 253,0 21 20 0.000071136 2206 X R 2528 / 2784 [xfs_io] 253,0 21 21 0.000072764 2206 X R 2528 / 2560 [xfs_io] 253,0 21 22 0.000076185 2206 X R 2784 / 3040 [xfs_io] 253,0 21 23 0.000077486 2206 X R 2784 / 2816 [xfs_io] 253,0 21 24 0.000080885 2206 X R 3040 / 3296 [xfs_io] 253,0 21 25 0.000082316 2206 X R 3040 / 3072 [xfs_io] 253,0 21 26 0.000085788 2206 X R 3296 / 3552 [xfs_io] 253,0 21 27 0.000087096 2206 X R 3296 / 3328 [xfs_io] 253,0 21 28 0.000093469 2206 X R 3552 / 3808 [xfs_io] 253,0 21 29 0.000095186 2206 X R 3552 / 3584 [xfs_io] 253,0 21 30 0.000099228 2206 X R 3808 / 4064 [xfs_io] 253,0 21 31 0.000101062 2206 X R 3808 / 3840 [xfs_io] 253,0 21 32 0.000104956 2206 X R 4064 / 4096 [xfs_io] 253,0 21 33 0.001138823 0 C R 4096 + 200 [0] after this revert: 253,0 18 1 0.000000000 4430 Q R 224 + 3896 [xfs_io] 253,0 18 2 0.000018359 4430 X R 224 / 256 [xfs_io] 253,0 18 3 0.000028898 4430 X R 256 / 512 [xfs_io] 253,0 18 4 0.000033535 4430 X R 512 / 768 [xfs_io] 253,0 18 5 0.000065684 4430 X R 768 / 1024 [xfs_io] 253,0 18 6 0.000091695 4430 X R 1024 / 1280 [xfs_io] 253,0 18 7 0.000098494 4430 X R 1280 / 1536 [xfs_io] 253,0 18 8 0.000114069 4430 X R 1536 / 1792 [xfs_io] 253,0 18 9 0.000129483 4430 X R 1792 / 2048 [xfs_io] 253,0 18 10 0.000136759 4430 X R 2048 / 2304 [xfs_io] 253,0 18 11 0.000152412 4430 X R 2304 / 2560 [xfs_io] 253,0 18 12 0.000160758 4430 X R 2560 / 2816 [xfs_io] 253,0 18 13 0.000183385 4430 X R 2816 / 3072 [xfs_io] 253,0 18 14 0.000190797 4430 X R 3072 / 3328 [xfs_io] 253,0 18 15 0.000197667 4430 X R 3328 / 3584 [xfs_io] 253,0 18 16 0.000218751 4430 X R 3584 / 3840 [xfs_io] 253,0 18 17 0.000226005 4430 X R 3840 / 4096 [xfs_io] 253,0 18 18 0.000250404 4430 Q R 4120 + 176 [xfs_io] 253,0 18 19 0.000847708 0 C R 4096 + 24 [0] 253,0 18 20 0.000855783 0 C R 4120 + 176 [0] Fixes: effd58c95f27774 ("dm: always call blk_queue_split() in dm_process_bio()") Cc: stable@vger.kernel.org Reported-by: Andreas Gruenbacher Tested-by: Barry Marson Signed-off-by: Mike Snitzer Signed-off-by: Greg Kroah-Hartman --- drivers/md/dm.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/md/dm.c b/drivers/md/dm.c index cf71a2277d60..1e6e0c970e19 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -1760,8 +1760,9 @@ static blk_qc_t dm_process_bio(struct mapped_device *md, * won't be imposed. */ if (current->bio_list) { - blk_queue_split(md->queue, &bio); - if (!is_abnormal_io(bio)) + if (is_abnormal_io(bio)) + blk_queue_split(md->queue, &bio); + else dm_queue_split(md, ti, &bio); } From f6c8f128856b7ffc648d78a552ec3bcb6d4ffea6 Mon Sep 17 00:00:00 2001 From: Geoffrey Allott Date: Thu, 19 Mar 2020 14:00:48 +0000 Subject: [PATCH 051/136] ALSA: hda/ca0132 - Add Recon3Di quirk to handle integrated sound on EVGA X99 Classified motherboard commit e9097e47e349b747dee50f935216de0ffb662962 upstream. I have a system which has an EVGA X99 Classified motherboard. The pin assignments for the HD Audio controller are not correct under Linux. Windows 10 works fine and informs me that it's using the Recon3Di driver, and on Linux, `cat /sys/class/sound/card0/device/subsystem_{vendor,device}` yields 0x3842 0x1038 This patch adds a corresponding entry to the quirk list. Signed-off-by: Geoffrey Allott Cc: Link: https://lore.kernel.org/r/a6cd56b678c00ce2db3685e4278919f2584f8244.camel@allott.email Signed-off-by: Takashi Iwai Signed-off-by: Greg Kroah-Hartman --- sound/pci/hda/patch_ca0132.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c index 32ed46464af7..adad3651889e 100644 --- a/sound/pci/hda/patch_ca0132.c +++ b/sound/pci/hda/patch_ca0132.c @@ -1180,6 +1180,7 @@ static const struct snd_pci_quirk ca0132_quirks[] = { SND_PCI_QUIRK(0x1458, 0xA016, "Recon3Di", QUIRK_R3DI), SND_PCI_QUIRK(0x1458, 0xA026, "Gigabyte G1.Sniper Z97", QUIRK_R3DI), SND_PCI_QUIRK(0x1458, 0xA036, "Gigabyte GA-Z170X-Gaming 7", QUIRK_R3DI), + SND_PCI_QUIRK(0x3842, 0x1038, "EVGA X99 Classified", QUIRK_R3DI), SND_PCI_QUIRK(0x1102, 0x0013, "Recon3D", QUIRK_R3D), SND_PCI_QUIRK(0x1102, 0x0051, "Sound Blaster AE-5", QUIRK_AE5), {} From ea26f82a04223adeb86103e8f17040db128589cb Mon Sep 17 00:00:00 2001 From: Bibby Hsieh Date: Fri, 14 Feb 2020 12:35:45 +0800 Subject: [PATCH 052/136] soc: mediatek: knows_txdone needs to be set in Mediatek CMDQ helper commit ce35e21d82bcac8b3fd5128888f9e233f8444293 upstream. Mediatek CMDQ driver have a mechanism to do TXDONE_BY_ACK, so we should set knows_txdone. Fixes:576f1b4bc802 ("soc: mediatek: Add Mediatek CMDQ helper") Cc: stable@vger.kernel.org # v5.0+ Signed-off-by: Bibby Hsieh Reviewed-by: CK Hu Signed-off-by: Matthias Brugger Signed-off-by: Greg Kroah-Hartman --- drivers/soc/mediatek/mtk-cmdq-helper.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c index 3c82de5f9417..73a852b2f417 100644 --- a/drivers/soc/mediatek/mtk-cmdq-helper.c +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c @@ -38,6 +38,7 @@ struct cmdq_client *cmdq_mbox_create(struct device *dev, int index, u32 timeout) client->pkt_cnt = 0; client->client.dev = dev; client->client.tx_block = false; + client->client.knows_txdone = true; client->chan = mbox_request_channel(&client->client, index); if (IS_ERR(client->chan)) { From 5f843cb7714272d88b7f42908b3b0227cb3dc9b7 Mon Sep 17 00:00:00 2001 From: Tariq Toukan Date: Mon, 24 Feb 2020 13:56:53 +0200 Subject: [PATCH 053/136] net/mlx5e: kTLS, Fix wrong value in record tracker enum commit f28ca65efa87b3fb8da3d69ca7cb1ebc0448de66 upstream. Fix to match the HW spec: TRACKING state is 1, SEARCHING is 2. No real issue for now, as these values are not currently used. Fixes: d2ead1f360e8 ("net/mlx5e: Add kTLS TX HW offload support") Signed-off-by: Tariq Toukan Reviewed-by: Boris Pismenny Signed-off-by: Saeed Mahameed Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.h b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.h index a3efa29a4629..63116be6b1d6 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.h @@ -38,8 +38,8 @@ enum { enum { MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_START = 0, - MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_SEARCHING = 1, - MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_TRACKING = 2, + MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_TRACKING = 1, + MLX5E_TLS_PROGRESS_PARAMS_RECORD_TRACKER_STATE_SEARCHING = 2, }; struct mlx5e_ktls_offload_context_tx { From 00e332e42bbe5b2def0d8c10cc3b7d82c44abd73 Mon Sep 17 00:00:00 2001 From: Mordechay Goodstein Date: Fri, 6 Mar 2020 15:16:22 +0200 Subject: [PATCH 054/136] iwlwifi: consider HE capability when setting LDPC commit cb377dfda1755b3bc01436755d866c8e5336a762 upstream. The AP may set the LDPC capability only in HE (IEEE80211_HE_PHY_CAP1), but we were checking it only in the HT capabilities. If we don't use this capability when required, the DSP gets the wrong configuration in HE and doesn't work properly. Signed-off-by: Mordechay Goodstein Fixes: befebbb30af0 ("iwlwifi: rs: consider LDPC capability in case of HE") Signed-off-by: Luca Coelho Link: https://lore.kernel.org/r/iwlwifi.20200306151128.492d167c1a25.I1ad1353dbbf6c99ae57814be750f41a1c9f7f4ac@changeid Signed-off-by: Greg Kroah-Hartman --- drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c index 098d48153a38..24df3182ec9e 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c @@ -147,7 +147,11 @@ static u16 rs_fw_get_config_flags(struct iwl_mvm *mvm, (vht_ena && (vht_cap->cap & IEEE80211_VHT_CAP_RXLDPC)))) flags |= IWL_TLC_MNG_CFG_FLAGS_LDPC_MSK; - /* consider our LDPC support in case of HE */ + /* consider LDPC support in case of HE */ + if (he_cap->has_he && (he_cap->he_cap_elem.phy_cap_info[1] & + IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD)) + flags |= IWL_TLC_MNG_CFG_FLAGS_LDPC_MSK; + if (sband->iftype_data && sband->iftype_data->he_cap.has_he && !(sband->iftype_data->he_cap.he_cap_elem.phy_cap_info[1] & IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD)) From b4190809a17be0e844ba54b6a75afae078386fc5 Mon Sep 17 00:00:00 2001 From: Mordechay Goodstein Date: Fri, 6 Mar 2020 15:16:24 +0200 Subject: [PATCH 055/136] iwlwifi: yoyo: don't add TLV offset when reading FIFOs commit a5688e600e78f9fc68102bf0fe5c797fc2826abe upstream. The TLV offset is only used to read registers, while the offset used for the FIFO addresses are hard coded in the driver and not given by the TLV. If we try to apply the TLV offset when reading the FIFOs, we'll read from invalid addresses, causing the driver to hang. Signed-off-by: Mordechay Goodstein Fixes: 8d7dea25ada7 ("iwlwifi: dbg_ini: implement Rx fifos dump") Signed-off-by: Luca Coelho Link: https://lore.kernel.org/r/iwlwifi.20200306151129.fbab869c26fa.I4ddac20d02f9bce41855a816aa6855c89bc3874e@changeid Signed-off-by: Greg Kroah-Hartman --- drivers/net/wireless/intel/iwlwifi/fw/dbg.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c index 386ca67ec7b4..ef65e1ea374f 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c +++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c @@ -8,7 +8,7 @@ * Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH * Copyright(c) 2015 - 2017 Intel Deutschland GmbH - * Copyright(c) 2018 - 2019 Intel Corporation + * Copyright(c) 2018 - 2020 Intel Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as @@ -31,7 +31,7 @@ * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH * Copyright(c) 2015 - 2017 Intel Deutschland GmbH - * Copyright(c) 2018 - 2019 Intel Corporation + * Copyright(c) 2018 - 2020 Intel Corporation * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -1373,11 +1373,7 @@ static int iwl_dump_ini_rxf_iter(struct iwl_fw_runtime *fwrt, goto out; } - /* - * region register have absolute value so apply rxf offset after - * reading the registers - */ - offs += rxf_data.offset; + offs = rxf_data.offset; /* Lock fence */ iwl_write_prph_no_grab(fwrt->trans, RXF_SET_FENCE_MODE + offs, 0x1); From be8a3aecd21ae4769766ca6f1a88a1fbfbe2d148 Mon Sep 17 00:00:00 2001 From: Luca Coelho Date: Fri, 6 Mar 2020 15:16:25 +0200 Subject: [PATCH 056/136] iwlwifi: dbg: don't abort if sending DBGC_SUSPEND_RESUME fails commit 699b760bd29edba736590fffef7654cb079c753e upstream. If the firmware is in a bad state or not initialized fully, sending the DBGC_SUSPEND_RESUME command fails but we can still collect logs. Instead of aborting the entire dump process, simply ignore the error. By removing the last callpoint that was checking the return value, we can also convert the function to return void. Signed-off-by: Luca Coelho Fixes: 576058330f2d ("iwlwifi: dbg: support debug recording suspend resume command") Signed-off-by: Luca Coelho Link: https://lore.kernel.org/r/iwlwifi.20200306151129.dcec37b2efd4.I8dcd190431d110a6a0e88095ce93591ccfb3d78d@changeid Signed-off-by: Greg Kroah-Hartman --- drivers/net/wireless/intel/iwlwifi/fw/dbg.c | 15 +++++---------- drivers/net/wireless/intel/iwlwifi/fw/dbg.h | 6 +++--- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c index ef65e1ea374f..cb5465d9c068 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c +++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c @@ -2311,10 +2311,7 @@ static void iwl_fw_dbg_collect_sync(struct iwl_fw_runtime *fwrt, u8 wk_idx) goto out; } - if (iwl_fw_dbg_stop_restart_recording(fwrt, ¶ms, true)) { - IWL_ERR(fwrt, "Failed to stop DBGC recording, aborting dump\n"); - goto out; - } + iwl_fw_dbg_stop_restart_recording(fwrt, ¶ms, true); IWL_DEBUG_FW_INFO(fwrt, "WRT: Data collection start\n"); if (iwl_trans_dbg_ini_valid(fwrt->trans)) @@ -2480,14 +2477,14 @@ static int iwl_fw_dbg_restart_recording(struct iwl_trans *trans, return 0; } -int iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt, - struct iwl_fw_dbg_params *params, - bool stop) +void iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt, + struct iwl_fw_dbg_params *params, + bool stop) { int ret = 0; if (test_bit(STATUS_FW_ERROR, &fwrt->trans->status)) - return 0; + return; if (fw_has_capa(&fwrt->fw->ucode_capa, IWL_UCODE_TLV_CAPA_DBG_SUSPEND_RESUME_CMD_SUPP)) @@ -2504,7 +2501,5 @@ int iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt, iwl_fw_set_dbg_rec_on(fwrt); } #endif - - return ret; } IWL_EXPORT_SYMBOL(iwl_fw_dbg_stop_restart_recording); diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.h b/drivers/net/wireless/intel/iwlwifi/fw/dbg.h index e3b5dd34643f..2ac61629f46f 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.h @@ -263,9 +263,9 @@ _iwl_fw_dbg_trigger_simple_stop(struct iwl_fw_runtime *fwrt, _iwl_fw_dbg_trigger_simple_stop((fwrt), (wdev), \ iwl_fw_dbg_get_trigger((fwrt)->fw,\ (trig))) -int iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt, - struct iwl_fw_dbg_params *params, - bool stop); +void iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt, + struct iwl_fw_dbg_params *params, + bool stop); #ifdef CONFIG_IWLWIFI_DEBUGFS static inline void iwl_fw_set_dbg_rec_on(struct iwl_fw_runtime *fwrt) From c4168080f1d4c6147b30c69c3d40d83464cc0f55 Mon Sep 17 00:00:00 2001 From: David Howells Date: Fri, 13 Mar 2020 17:30:27 +0000 Subject: [PATCH 057/136] rxrpc: Fix sendmsg(MSG_WAITALL) handling commit 498b577660f08cef5d9e78e0ed6dcd4c0939e98c upstream. Fix the handling of sendmsg() with MSG_WAITALL for userspace to round the timeout for when a signal occurs up to at least two jiffies as a 1 jiffy timeout may end up being effectively 0 if jiffies wraps at the wrong time. Fixes: bc5e3a546d55 ("rxrpc: Use MSG_WAITALL to tell sendmsg() to temporarily ignore signals") Signed-off-by: David Howells Signed-off-by: Greg Kroah-Hartman --- net/rxrpc/sendmsg.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/rxrpc/sendmsg.c b/net/rxrpc/sendmsg.c index 813fd6888142..136eb465bfcb 100644 --- a/net/rxrpc/sendmsg.c +++ b/net/rxrpc/sendmsg.c @@ -58,8 +58,8 @@ static int rxrpc_wait_for_tx_window_nonintr(struct rxrpc_sock *rx, rtt = READ_ONCE(call->peer->rtt); rtt2 = nsecs_to_jiffies64(rtt) * 2; - if (rtt2 < 1) - rtt2 = 1; + if (rtt2 < 2) + rtt2 = 2; timeout = rtt2; tx_start = READ_ONCE(call->tx_hard_ack); From a6b1820d333071943a9cba434249e9176fa7fed0 Mon Sep 17 00:00:00 2001 From: Mike Marciniszyn Date: Fri, 20 Mar 2020 16:02:10 -0400 Subject: [PATCH 058/136] IB/hfi1: Ensure pq is not left on waitlist commit 9a293d1e21a6461a11b4217b155bf445e57f4131 upstream. The following warning can occur when a pq is left on the dmawait list and the pq is then freed: WARNING: CPU: 47 PID: 3546 at lib/list_debug.c:29 __list_add+0x65/0xc0 list_add corruption. next->prev should be prev (ffff939228da1880), but was ffff939cabb52230. (next=ffff939cabb52230). Modules linked in: mmfs26(OE) mmfslinux(OE) tracedev(OE) 8021q garp mrp ib_isert iscsi_target_mod target_core_mod crc_t10dif crct10dif_generic opa_vnic rpcrdma ib_iser libiscsi scsi_transport_iscsi ib_ipoib(OE) bridge stp llc iTCO_wdt iTCO_vendor_support intel_powerclamp coretemp intel_rapl iosf_mbi kvm_intel kvm irqbypass crct10dif_pclmul crct10dif_common crc32_pclmul ghash_clmulni_intel aesni_intel lrw gf128mul glue_helper ablk_helper cryptd ast ttm drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops drm pcspkr joydev drm_panel_orientation_quirks i2c_i801 mei_me lpc_ich mei wmi ipmi_si ipmi_devintf ipmi_msghandler nfit libnvdimm acpi_power_meter acpi_pad hfi1(OE) rdmavt(OE) rdma_ucm ib_ucm ib_uverbs ib_umad rdma_cm ib_cm iw_cm ib_core binfmt_misc numatools(OE) xpmem(OE) ip_tables nfsv3 nfs_acl nfs lockd grace sunrpc fscache igb ahci libahci i2c_algo_bit dca libata ptp pps_core crc32c_intel [last unloaded: i2c_algo_bit] CPU: 47 PID: 3546 Comm: wrf.exe Kdump: loaded Tainted: G W OE ------------ 3.10.0-957.41.1.el7.x86_64 #1 Hardware name: HPE.COM HPE SGI 8600-XA730i Gen10/X11DPT-SB-SG007, BIOS SBED1229 01/22/2019 Call Trace: [] dump_stack+0x19/0x1b [] __warn+0xd8/0x100 [] warn_slowpath_fmt+0x5f/0x80 [] ? ___slab_alloc+0x24e/0x4f0 [] __list_add+0x65/0xc0 [] defer_packet_queue+0x145/0x1a0 [hfi1] [] sdma_check_progress+0x67/0xa0 [hfi1] [] sdma_send_txlist+0x432/0x550 [hfi1] [] ? kmem_cache_alloc+0x179/0x1f0 [] ? user_sdma_send_pkts+0xc3/0x1990 [hfi1] [] user_sdma_send_pkts+0x158a/0x1990 [hfi1] [] ? try_to_del_timer_sync+0x5e/0x90 [] ? __check_object_size+0x1ca/0x250 [] hfi1_user_sdma_process_request+0xd66/0x1280 [hfi1] [] hfi1_aio_write+0xca/0x120 [hfi1] [] do_sync_readv_writev+0x7b/0xd0 [] do_readv_writev+0xce/0x260 [] ? pick_next_task_fair+0x5f/0x1b0 [] ? sched_clock_cpu+0x85/0xc0 [] ? __schedule+0x13a/0x860 [] vfs_writev+0x35/0x60 [] SyS_writev+0x7f/0x110 [] system_call_fastpath+0x22/0x27 The issue happens when wait_event_interruptible_timeout() returns a value <= 0. In that case, the pq is left on the list. The code continues sending packets and potentially can complete the current request with the pq still on the dmawait list provided no descriptor shortage is seen. If the pq is torn down in that state, the sdma interrupt handler could find the now freed pq on the list with list corruption or memory corruption resulting. Fix by adding a flush routine to ensure that the pq is never on a list after processing a request. A follow-up patch series will address issues with seqlock surfaced in: https://lore.kernel.org/r/20200320003129.GP20941@ziepe.ca The seqlock use for sdma will then be converted to a spin lock since the list_empty() doesn't need the protection afforded by the sequence lock currently in use. Fixes: a0d406934a46 ("staging/rdma/hfi1: Add page lock limit check for SDMA requests") Link: https://lore.kernel.org/r/20200320200200.23203.37777.stgit@awfm-01.aw.intel.com Reviewed-by: Kaike Wan Signed-off-by: Mike Marciniszyn Signed-off-by: Dennis Dalessandro Signed-off-by: Jason Gunthorpe Signed-off-by: Greg Kroah-Hartman --- drivers/infiniband/hw/hfi1/user_sdma.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/drivers/infiniband/hw/hfi1/user_sdma.c b/drivers/infiniband/hw/hfi1/user_sdma.c index c2f0d9ba93de..13e4203497b3 100644 --- a/drivers/infiniband/hw/hfi1/user_sdma.c +++ b/drivers/infiniband/hw/hfi1/user_sdma.c @@ -141,6 +141,7 @@ static int defer_packet_queue( */ xchg(&pq->state, SDMA_PKT_Q_DEFERRED); if (list_empty(&pq->busy.list)) { + pq->busy.lock = &sde->waitlock; iowait_get_priority(&pq->busy); iowait_queue(pkts_sent, &pq->busy, &sde->dmawait); } @@ -155,6 +156,7 @@ static void activate_packet_queue(struct iowait *wait, int reason) { struct hfi1_user_sdma_pkt_q *pq = container_of(wait, struct hfi1_user_sdma_pkt_q, busy); + pq->busy.lock = NULL; xchg(&pq->state, SDMA_PKT_Q_ACTIVE); wake_up(&wait->wait_dma); }; @@ -256,6 +258,21 @@ int hfi1_user_sdma_alloc_queues(struct hfi1_ctxtdata *uctxt, return ret; } +static void flush_pq_iowait(struct hfi1_user_sdma_pkt_q *pq) +{ + unsigned long flags; + seqlock_t *lock = pq->busy.lock; + + if (!lock) + return; + write_seqlock_irqsave(lock, flags); + if (!list_empty(&pq->busy.list)) { + list_del_init(&pq->busy.list); + pq->busy.lock = NULL; + } + write_sequnlock_irqrestore(lock, flags); +} + int hfi1_user_sdma_free_queues(struct hfi1_filedata *fd, struct hfi1_ctxtdata *uctxt) { @@ -281,6 +298,7 @@ int hfi1_user_sdma_free_queues(struct hfi1_filedata *fd, kfree(pq->reqs); kfree(pq->req_in_use); kmem_cache_destroy(pq->txreq_cache); + flush_pq_iowait(pq); kfree(pq); } else { spin_unlock(&fd->pq_rcu_lock); @@ -587,11 +605,12 @@ int hfi1_user_sdma_process_request(struct hfi1_filedata *fd, if (ret < 0) { if (ret != -EBUSY) goto free_req; - wait_event_interruptible_timeout( + if (wait_event_interruptible_timeout( pq->busy.wait_dma, - (pq->state == SDMA_PKT_Q_ACTIVE), + pq->state == SDMA_PKT_Q_ACTIVE, msecs_to_jiffies( - SDMA_IOWAIT_TIMEOUT)); + SDMA_IOWAIT_TIMEOUT)) <= 0) + flush_pq_iowait(pq); } } *count += idx; From 4ebd1664179767d69e8cb12722df9a7a9a4dbd49 Mon Sep 17 00:00:00 2001 From: Neal Cardwell Date: Sat, 22 Feb 2020 11:21:15 -0500 Subject: [PATCH 059/136] tcp: fix TFO SYNACK undo to avoid double-timestamp-undo commit dad8cea7add96a353fa1898b5ccefbb72da66f29 upstream. In a rare corner case the new logic for undo of SYNACK RTO could result in triggering the warning in tcp_fastretrans_alert() that says: WARN_ON(tp->retrans_out != 0); The warning looked like: WARNING: CPU: 1 PID: 1 at net/ipv4/tcp_input.c:2818 tcp_ack+0x13e0/0x3270 The sequence that tickles this bug is: - Fast Open server receives TFO SYN with data, sends SYNACK - (client receives SYNACK and sends ACK, but ACK is lost) - server app sends some data packets - (N of the first data packets are lost) - server receives client ACK that has a TS ECR matching first SYNACK, and also SACKs suggesting the first N data packets were lost - server performs TS undo of SYNACK RTO, then immediately enters recovery - buggy behavior then performed a *second* undo that caused the connection to be in CA_Open with retrans_out != 0 Basically, the incoming ACK packet with SACK blocks causes us to first undo the cwnd reduction from the SYNACK RTO, but then immediately enters fast recovery, which then makes us eligible for undo again. And then tcp_rcv_synrecv_state_fastopen() accidentally performs an undo using a "mash-up" of state from two different loss recovery phases: it uses the timestamp info from the ACK of the original SYNACK, and the undo_marker from the fast recovery. This fix refines the logic to only invoke the tcp_try_undo_loss() inside tcp_rcv_synrecv_state_fastopen() if the connection is still in CA_Loss. If peer SACKs triggered fast recovery, then tcp_rcv_synrecv_state_fastopen() can't safely undo. Fixes: 794200d66273 ("tcp: undo cwnd on Fast Open spurious SYNACK retransmit") Signed-off-by: Neal Cardwell Signed-off-by: Yuchung Cheng Signed-off-by: Eric Dumazet Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/ipv4/tcp_input.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 6f7155d91313..5af22c9712a6 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -6096,7 +6096,11 @@ static void tcp_rcv_synrecv_state_fastopen(struct sock *sk) { struct request_sock *req; - tcp_try_undo_loss(sk, false); + /* If we are still handling the SYNACK RTO, see if timestamp ECR allows + * undo. If peer SACKs triggered fast recovery, we can't undo here. + */ + if (inet_csk(sk)->icsk_ca_state == TCP_CA_Loss) + tcp_try_undo_loss(sk, false); /* Reset rtx states to prevent spurious retransmits_timed_out() */ tcp_sk(sk)->retrans_stamp = 0; From b42afa3475bfd9ce96c230a50c6cd81288147bac Mon Sep 17 00:00:00 2001 From: Mika Westerberg Date: Wed, 26 Feb 2020 16:21:20 +0300 Subject: [PATCH 060/136] watchdog: iTCO_wdt: Export vendorsupport commit 7ca6ee38909109751bfab79e9f6c570d2ed258c6 upstream. In preparation for making ->smi_res optional the iTCO_wdt driver needs to know whether vendorsupport is being set to non-zero. For this reason export the variable. Signed-off-by: Mika Westerberg Reviewed-by: Guenter Roeck Signed-off-by: Wolfram Sang Signed-off-by: Greg Kroah-Hartman --- drivers/watchdog/iTCO_vendor.h | 2 ++ drivers/watchdog/iTCO_vendor_support.c | 16 +++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/drivers/watchdog/iTCO_vendor.h b/drivers/watchdog/iTCO_vendor.h index 0f7373ba10d5..69e92e692ae0 100644 --- a/drivers/watchdog/iTCO_vendor.h +++ b/drivers/watchdog/iTCO_vendor.h @@ -1,10 +1,12 @@ /* SPDX-License-Identifier: GPL-2.0 */ /* iTCO Vendor Specific Support hooks */ #ifdef CONFIG_ITCO_VENDOR_SUPPORT +extern int iTCO_vendorsupport; extern void iTCO_vendor_pre_start(struct resource *, unsigned int); extern void iTCO_vendor_pre_stop(struct resource *); extern int iTCO_vendor_check_noreboot_on(void); #else +#define iTCO_vendorsupport 0 #define iTCO_vendor_pre_start(acpibase, heartbeat) {} #define iTCO_vendor_pre_stop(acpibase) {} #define iTCO_vendor_check_noreboot_on() 1 diff --git a/drivers/watchdog/iTCO_vendor_support.c b/drivers/watchdog/iTCO_vendor_support.c index 4f1b96f59349..cf0eaa04b064 100644 --- a/drivers/watchdog/iTCO_vendor_support.c +++ b/drivers/watchdog/iTCO_vendor_support.c @@ -39,8 +39,10 @@ /* Broken BIOS */ #define BROKEN_BIOS 911 -static int vendorsupport; -module_param(vendorsupport, int, 0); +int iTCO_vendorsupport; +EXPORT_SYMBOL(iTCO_vendorsupport); + +module_param_named(vendorsupport, iTCO_vendorsupport, int, 0); MODULE_PARM_DESC(vendorsupport, "iTCO vendor specific support mode, default=" "0 (none), 1=SuperMicro Pent3, 911=Broken SMI BIOS"); @@ -152,7 +154,7 @@ static void broken_bios_stop(struct resource *smires) void iTCO_vendor_pre_start(struct resource *smires, unsigned int heartbeat) { - switch (vendorsupport) { + switch (iTCO_vendorsupport) { case SUPERMICRO_OLD_BOARD: supermicro_old_pre_start(smires); break; @@ -165,7 +167,7 @@ EXPORT_SYMBOL(iTCO_vendor_pre_start); void iTCO_vendor_pre_stop(struct resource *smires) { - switch (vendorsupport) { + switch (iTCO_vendorsupport) { case SUPERMICRO_OLD_BOARD: supermicro_old_pre_stop(smires); break; @@ -178,7 +180,7 @@ EXPORT_SYMBOL(iTCO_vendor_pre_stop); int iTCO_vendor_check_noreboot_on(void) { - switch (vendorsupport) { + switch (iTCO_vendorsupport) { case SUPERMICRO_OLD_BOARD: return 0; default: @@ -189,13 +191,13 @@ EXPORT_SYMBOL(iTCO_vendor_check_noreboot_on); static int __init iTCO_vendor_init_module(void) { - if (vendorsupport == SUPERMICRO_NEW_BOARD) { + if (iTCO_vendorsupport == SUPERMICRO_NEW_BOARD) { pr_warn("Option vendorsupport=%d is no longer supported, " "please use the w83627hf_wdt driver instead\n", SUPERMICRO_NEW_BOARD); return -EINVAL; } - pr_info("vendor-support=%d\n", vendorsupport); + pr_info("vendor-support=%d\n", iTCO_vendorsupport); return 0; } From 079c8da9e5acc21665e3bbd2cea1b064b39976be Mon Sep 17 00:00:00 2001 From: Mika Westerberg Date: Wed, 26 Feb 2020 16:21:21 +0300 Subject: [PATCH 061/136] watchdog: iTCO_wdt: Make ICH_RES_IO_SMI optional commit e42b0c24389d5a1602e77db4f6def0d5a19e3e43 upstream. The iTCO_wdt driver only needs ICH_RES_IO_SMI I/O resource when either turn_SMI_watchdog_clear_off module parameter is set to match ->iTCO_version (or higher), and when legacy iTCO_vendorsupport is set. Modify the driver so that ICH_RES_IO_SMI is optional if the two conditions are not met. Signed-off-by: Mika Westerberg Reviewed-by: Guenter Roeck Signed-off-by: Wolfram Sang Signed-off-by: Greg Kroah-Hartman --- drivers/watchdog/iTCO_wdt.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c index 156360e37714..e707c4797f76 100644 --- a/drivers/watchdog/iTCO_wdt.c +++ b/drivers/watchdog/iTCO_wdt.c @@ -459,13 +459,25 @@ static int iTCO_wdt_probe(struct platform_device *pdev) if (!p->tco_res) return -ENODEV; - p->smi_res = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_IO_SMI); - if (!p->smi_res) - return -ENODEV; - p->iTCO_version = pdata->version; p->pci_dev = to_pci_dev(dev->parent); + p->smi_res = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_IO_SMI); + if (p->smi_res) { + /* The TCO logic uses the TCO_EN bit in the SMI_EN register */ + if (!devm_request_region(dev, p->smi_res->start, + resource_size(p->smi_res), + pdev->name)) { + pr_err("I/O address 0x%04llx already in use, device disabled\n", + (u64)SMI_EN(p)); + return -EBUSY; + } + } else if (iTCO_vendorsupport || + turn_SMI_watchdog_clear_off >= p->iTCO_version) { + pr_err("SMI I/O resource is missing\n"); + return -ENODEV; + } + iTCO_wdt_no_reboot_bit_setup(p, pdata); /* @@ -492,14 +504,6 @@ static int iTCO_wdt_probe(struct platform_device *pdev) /* Set the NO_REBOOT bit to prevent later reboots, just for sure */ p->update_no_reboot_bit(p->no_reboot_priv, true); - /* The TCO logic uses the TCO_EN bit in the SMI_EN register */ - if (!devm_request_region(dev, p->smi_res->start, - resource_size(p->smi_res), - pdev->name)) { - pr_err("I/O address 0x%04llx already in use, device disabled\n", - (u64)SMI_EN(p)); - return -EBUSY; - } if (turn_SMI_watchdog_clear_off >= p->iTCO_version) { /* * Bit 13: TCO_EN -> 0 From 15ee8da79ee3447d1c483c4c5500e0f12f07b6e2 Mon Sep 17 00:00:00 2001 From: Mika Westerberg Date: Wed, 26 Feb 2020 16:21:22 +0300 Subject: [PATCH 062/136] i2c: i801: Do not add ICH_RES_IO_SMI for the iTCO_wdt device commit 04bbb97d1b732b2d197f103c5818f5c214a4cf81 upstream. Martin noticed that nct6775 driver does not load properly on his system in v5.4+ kernels. The issue was bisected to commit b84398d6d7f9 ("i2c: i801: Use iTCO version 6 in Cannon Lake PCH and beyond") but it is likely not the culprit because the faulty code has been in the driver already since commit 9424693035a5 ("i2c: i801: Create iTCO device on newer Intel PCHs"). So more likely some commit that added PCI IDs of recent chipsets made the driver to create the iTCO_wdt device on Martins system. The issue was debugged to be PCI configuration access to the PMC device that is not present. This returns all 1's when read and this caused the iTCO_wdt driver to accidentally request resourses used by nct6775. It turns out that the SMI resource is only required for some ancient systems, not the ones supported by this driver. For this reason do not populate the SMI resource at all and drop all the related code. The driver now always populates the main I/O resource and only in case of SPT (Intel Sunrisepoint) compatible devices it adds another resource for the NO_REBOOT bit. These two resources are of different types so platform_get_resource() used by the iTCO_wdt driver continues to find the both resources at index 0. Link: https://lore.kernel.org/linux-hwmon/CAM1AHpQ4196tyD=HhBu-2donSsuogabkfP03v1YF26Q7_BgvgA@mail.gmail.com/ Fixes: 9424693035a5 ("i2c: i801: Create iTCO device on newer Intel PCHs") [wsa: complete fix needs all of http://patchwork.ozlabs.org/project/linux-i2c/list/?series=160959&state=*] Reported-by: Martin Volf Signed-off-by: Mika Westerberg Reviewed-by: Guenter Roeck Signed-off-by: Wolfram Sang Signed-off-by: Greg Kroah-Hartman --- drivers/i2c/busses/i2c-i801.c | 45 ++++++++++------------------------- 1 file changed, 12 insertions(+), 33 deletions(-) diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c index f1c714acc280..3ff6fbd79b12 100644 --- a/drivers/i2c/busses/i2c-i801.c +++ b/drivers/i2c/busses/i2c-i801.c @@ -129,11 +129,6 @@ #define TCOBASE 0x050 #define TCOCTL 0x054 -#define ACPIBASE 0x040 -#define ACPIBASE_SMI_OFF 0x030 -#define ACPICTRL 0x044 -#define ACPICTRL_EN 0x080 - #define SBREG_BAR 0x10 #define SBREG_SMBCTRL 0xc6000c #define SBREG_SMBCTRL_DNV 0xcf000c @@ -1544,7 +1539,7 @@ i801_add_tco_spt(struct i801_priv *priv, struct pci_dev *pci_dev, pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, hidden); spin_unlock(&p2sb_spinlock); - res = &tco_res[ICH_RES_MEM_OFF]; + res = &tco_res[1]; if (pci_dev->device == PCI_DEVICE_ID_INTEL_DNV_SMBUS) res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL_DNV; else @@ -1554,7 +1549,7 @@ i801_add_tco_spt(struct i801_priv *priv, struct pci_dev *pci_dev, res->flags = IORESOURCE_MEM; return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1, - tco_res, 3, &spt_tco_platform_data, + tco_res, 2, &spt_tco_platform_data, sizeof(spt_tco_platform_data)); } @@ -1567,17 +1562,16 @@ static struct platform_device * i801_add_tco_cnl(struct i801_priv *priv, struct pci_dev *pci_dev, struct resource *tco_res) { - return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1, - tco_res, 2, &cnl_tco_platform_data, - sizeof(cnl_tco_platform_data)); + return platform_device_register_resndata(&pci_dev->dev, + "iTCO_wdt", -1, tco_res, 1, &cnl_tco_platform_data, + sizeof(cnl_tco_platform_data)); } static void i801_add_tco(struct i801_priv *priv) { - u32 base_addr, tco_base, tco_ctl, ctrl_val; struct pci_dev *pci_dev = priv->pci_dev; - struct resource tco_res[3], *res; - unsigned int devfn; + struct resource tco_res[2], *res; + u32 tco_base, tco_ctl; /* If we have ACPI based watchdog use that instead */ if (acpi_has_watchdog()) @@ -1592,30 +1586,15 @@ static void i801_add_tco(struct i801_priv *priv) return; memset(tco_res, 0, sizeof(tco_res)); - - res = &tco_res[ICH_RES_IO_TCO]; + /* + * Always populate the main iTCO IO resource here. The second entry + * for NO_REBOOT MMIO is filled by the SPT specific function. + */ + res = &tco_res[0]; res->start = tco_base & ~1; res->end = res->start + 32 - 1; res->flags = IORESOURCE_IO; - /* - * Power Management registers. - */ - devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 2); - pci_bus_read_config_dword(pci_dev->bus, devfn, ACPIBASE, &base_addr); - - res = &tco_res[ICH_RES_IO_SMI]; - res->start = (base_addr & ~1) + ACPIBASE_SMI_OFF; - res->end = res->start + 3; - res->flags = IORESOURCE_IO; - - /* - * Enable the ACPI I/O space. - */ - pci_bus_read_config_dword(pci_dev->bus, devfn, ACPICTRL, &ctrl_val); - ctrl_val |= ACPICTRL_EN; - pci_bus_write_config_dword(pci_dev->bus, devfn, ACPICTRL, ctrl_val); - if (priv->features & FEATURE_TCO_CNL) priv->tco_pdev = i801_add_tco_cnl(priv, pci_dev, tco_res); else From 238112fcf3911bdc6b3f32b248c554d704f64c33 Mon Sep 17 00:00:00 2001 From: Amritha Nambiar Date: Mon, 24 Feb 2020 10:56:00 -0800 Subject: [PATCH 063/136] net: Fix Tx hash bound checking commit 6e11d1578fba8d09d03a286740ffcf336d53928c upstream. Fixes the lower and upper bounds when there are multiple TCs and traffic is on the the same TC on the same device. The lower bound is represented by 'qoffset' and the upper limit for hash value is 'qcount + qoffset'. This gives a clean Rx to Tx queue mapping when there are multiple TCs, as the queue indices for upper TCs will be offset by 'qoffset'. v2: Fixed commit description based on comments. Fixes: 1b837d489e06 ("net: Revoke export for __skb_tx_hash, update it to just be static skb_tx_hash") Fixes: eadec877ce9c ("net: Add support for subordinate traffic classes to netdev_pick_tx") Signed-off-by: Amritha Nambiar Reviewed-by: Alexander Duyck Reviewed-by: Sridhar Samudrala Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/core/dev.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/core/dev.c b/net/core/dev.c index 931dfdcbabf1..c19c424197e3 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2795,6 +2795,8 @@ static u16 skb_tx_hash(const struct net_device *dev, if (skb_rx_queue_recorded(skb)) { hash = skb_get_rx_queue(skb); + if (hash >= qoffset) + hash -= qoffset; while (unlikely(hash >= qcount)) hash -= qcount; return hash + qoffset; From c3d4e6fc4b37f60ab41f663c3d3fb57570f446bf Mon Sep 17 00:00:00 2001 From: Daniel Jordan Date: Tue, 3 Dec 2019 14:31:11 -0500 Subject: [PATCH 064/136] padata: always acquire cpu_hotplug_lock before pinst->lock commit 38228e8848cd7dd86ccb90406af32de0cad24be3 upstream. lockdep complains when padata's paths to update cpumasks via CPU hotplug and sysfs are both taken: # echo 0 > /sys/devices/system/cpu/cpu1/online # echo ff > /sys/kernel/pcrypt/pencrypt/parallel_cpumask ====================================================== WARNING: possible circular locking dependency detected 5.4.0-rc8-padata-cpuhp-v3+ #1 Not tainted ------------------------------------------------------ bash/205 is trying to acquire lock: ffffffff8286bcd0 (cpu_hotplug_lock.rw_sem){++++}, at: padata_set_cpumask+0x2b/0x120 but task is already holding lock: ffff8880001abfa0 (&pinst->lock){+.+.}, at: padata_set_cpumask+0x26/0x120 which lock already depends on the new lock. padata doesn't take cpu_hotplug_lock and pinst->lock in a consistent order. Which should be first? CPU hotplug calls into padata with cpu_hotplug_lock already held, so it should have priority. Fixes: 6751fb3c0e0c ("padata: Use get_online_cpus/put_online_cpus") Signed-off-by: Daniel Jordan Cc: Eric Biggers Cc: Herbert Xu Cc: Steffen Klassert Cc: linux-crypto@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Herbert Xu Signed-off-by: Greg Kroah-Hartman --- kernel/padata.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/padata.c b/kernel/padata.c index 7bd37dd9ec55..c4b774331e46 100644 --- a/kernel/padata.c +++ b/kernel/padata.c @@ -643,8 +643,8 @@ int padata_set_cpumask(struct padata_instance *pinst, int cpumask_type, struct cpumask *serial_mask, *parallel_mask; int err = -EINVAL; - mutex_lock(&pinst->lock); get_online_cpus(); + mutex_lock(&pinst->lock); switch (cpumask_type) { case PADATA_CPU_PARALLEL: @@ -662,8 +662,8 @@ int padata_set_cpumask(struct padata_instance *pinst, int cpumask_type, err = __padata_set_cpumasks(pinst, parallel_mask, serial_mask); out: - put_online_cpus(); mutex_unlock(&pinst->lock); + put_online_cpus(); return err; } From c3f87e03f90ff2901525cc99c0e3bfb6fcbfd184 Mon Sep 17 00:00:00 2001 From: Randy Dunlap Date: Wed, 1 Apr 2020 21:10:58 -0700 Subject: [PATCH 065/136] mm: mempolicy: require at least one nodeid for MPOL_PREFERRED commit aa9f7d5172fac9bf1f09e678c35e287a40a7b7dd upstream. Using an empty (malformed) nodelist that is not caught during mount option parsing leads to a stack-out-of-bounds access. The option string that was used was: "mpol=prefer:,". However, MPOL_PREFERRED requires a single node number, which is not being provided here. Add a check that 'nodes' is not empty after parsing for MPOL_PREFERRED's nodeid. Fixes: 095f1fc4ebf3 ("mempolicy: rework shmem mpol parsing and display") Reported-by: Entropy Moe <3ntr0py1337@gmail.com> Reported-by: syzbot+b055b1a6b2b958707a21@syzkaller.appspotmail.com Signed-off-by: Randy Dunlap Signed-off-by: Andrew Morton Tested-by: syzbot+b055b1a6b2b958707a21@syzkaller.appspotmail.com Cc: Lee Schermerhorn Link: http://lkml.kernel.org/r/89526377-7eb6-b662-e1d8-4430928abde9@infradead.org Signed-off-by: Linus Torvalds Cc: Guenter Roeck Signed-off-by: Greg Kroah-Hartman --- mm/mempolicy.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index fbb3258af275..787c5fc91b21 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -2822,7 +2822,9 @@ int mpol_parse_str(char *str, struct mempolicy **mpol) switch (mode) { case MPOL_PREFERRED: /* - * Insist on a nodelist of one node only + * Insist on a nodelist of one node only, although later + * we use first_node(nodes) to grab a single node, so here + * nodelist (or nodes) cannot be empty. */ if (nodelist) { char *rest = nodelist; @@ -2830,6 +2832,8 @@ int mpol_parse_str(char *str, struct mempolicy **mpol) rest++; if (*rest) goto out; + if (nodes_empty(nodes)) + goto out; } break; case MPOL_INTERLEAVE: From de850633a01fa06515a89a184d6e9769c160d932 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 8 Apr 2020 09:08:47 +0200 Subject: [PATCH 066/136] Linux 5.4.31 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e1f41756f475..af28533919cc 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 30 +SUBLEVEL = 31 EXTRAVERSION = NAME = Kleptomaniac Octopus From 601cd6e2ce7b1d5f2b31e25c6d43f37050ffedb7 Mon Sep 17 00:00:00 2001 From: Zhenfang Wang Date: Thu, 12 Mar 2020 21:26:04 +0800 Subject: [PATCH 067/136] UPSTREAM: dmaengine: sprd: Set request pending flag when DMA controller is active On new Spreadtrum platforms, when the CPU enters idle, it will close the DMA controllers' clock to save power if the DMA controller is not busy. Moreover the DMA controller's busy signal depends on the DMA enable flag and the request pending flag. When DMA controller starts to transfer data, which means we already set the DMA enable flag, but now we should also set the request pending flag, in case the DMA clock will be closed accidentally if the CPU can not detect the DMA controller's busy signal. bug: 153500755 Change-Id: I9123685be01312db4caa47a742e6e6d0c8ef4e08 Signed-off-by: Zhenfang Wang Signed-off-by: Baolin Wang Link: https://lore.kernel.org/r/02adbe4364ec436ec2c5bc8fd2386bab98edd884.1584019223.git.baolin.wang7@gmail.com Signed-off-by: Vinod Koul (cherry picked from commit d0f19a48a185dab592afe1e18bf31a9d6790620d) --- drivers/dma/sprd-dma.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/dma/sprd-dma.c b/drivers/dma/sprd-dma.c index a1bc7580b6a0..d10e1769b83e 100644 --- a/drivers/dma/sprd-dma.c +++ b/drivers/dma/sprd-dma.c @@ -486,6 +486,28 @@ static int sprd_dma_set_2stage_config(struct sprd_dma_chn *schan) return 0; } +static void sprd_dma_set_pending(struct sprd_dma_chn *schan, bool enable) +{ + struct sprd_dma_dev *sdev = to_sprd_dma_dev(&schan->vc.chan); + u32 reg, val, req_id; + + if (schan->dev_id == SPRD_DMA_SOFTWARE_UID) + return; + + /* The DMA request id always starts from 0. */ + req_id = schan->dev_id - 1; + + if (req_id < 32) { + reg = SPRD_DMA_GLB_REQ_PEND0_EN; + val = BIT(req_id); + } else { + reg = SPRD_DMA_GLB_REQ_PEND1_EN; + val = BIT(req_id - 32); + } + + sprd_dma_glb_update(sdev, reg, val, enable ? val : 0); +} + static void sprd_dma_set_chn_config(struct sprd_dma_chn *schan, struct sprd_dma_desc *sdesc) { @@ -532,6 +554,7 @@ static void sprd_dma_start(struct sprd_dma_chn *schan) */ sprd_dma_set_chn_config(schan, schan->cur_desc); sprd_dma_set_uid(schan); + sprd_dma_set_pending(schan, true); sprd_dma_enable_chn(schan); if (schan->dev_id == SPRD_DMA_SOFTWARE_UID && @@ -543,6 +566,7 @@ static void sprd_dma_start(struct sprd_dma_chn *schan) static void sprd_dma_stop(struct sprd_dma_chn *schan) { sprd_dma_stop_and_disable(schan); + sprd_dma_set_pending(schan, false); sprd_dma_unset_uid(schan); sprd_dma_clear_int(schan); schan->cur_desc = NULL; From 13ebd2bf97ce63763452177f1b0e6ddf5282eed3 Mon Sep 17 00:00:00 2001 From: Freeman Liu Date: Mon, 23 Mar 2020 15:00:03 +0000 Subject: [PATCH 068/136] UPSTREAM: nvmem: sprd: Fix the block lock operation According to the Spreadtrum eFuse specification, we should write 0 to the block to trigger the lock operation. bug: 153500755 Fixes: 096030e7f449 ("nvmem: sprd: Add Spreadtrum SoCs eFuse support") Change-Id: I4080e4a4ed1de45f79ce2fbadd1b66aa53b8495b Cc: stable Signed-off-by: Freeman Liu Signed-off-by: Baolin Wang Signed-off-by: Srinivas Kandagatla Link: https://lore.kernel.org/r/20200323150007.7487-2-srinivas.kandagatla@linaro.org Signed-off-by: Greg Kroah-Hartman (cherry picked from commit c66ebde4d988b592e8f0008e04c47cc4950a49d3) --- drivers/nvmem/sprd-efuse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/nvmem/sprd-efuse.c b/drivers/nvmem/sprd-efuse.c index 2f1e0fbd1901..7a189ef52333 100644 --- a/drivers/nvmem/sprd-efuse.c +++ b/drivers/nvmem/sprd-efuse.c @@ -239,7 +239,7 @@ static int sprd_efuse_raw_prog(struct sprd_efuse *efuse, u32 blk, bool doub, ret = -EBUSY; } else { sprd_efuse_set_prog_lock(efuse, lock); - writel(*data, efuse->base + SPRD_EFUSE_MEM(blk)); + writel(0, efuse->base + SPRD_EFUSE_MEM(blk)); sprd_efuse_set_prog_lock(efuse, false); } From b55604ac31d0078f7048a023d1fe7dc20002b95f Mon Sep 17 00:00:00 2001 From: Freeman Liu Date: Mon, 23 Mar 2020 15:00:04 +0000 Subject: [PATCH 069/136] UPSTREAM: nvmem: sprd: Optimize the block lock operation We have some cases that will programme the eFuse block partially multiple times, so we should allow the block to be programmed again if it was programmed partially. But we should lock the block if the whole block was programmed. Thus add a condition to validate if we need lock the block or not. Moreover we only enable the auto-check function when locking the block. bug: 153500755 Change-Id: Ia019890c01781a298c6676ede19a6b2da2728000 Signed-off-by: Freeman Liu Signed-off-by: Baolin Wang Signed-off-by: Srinivas Kandagatla Link: https://lore.kernel.org/r/20200323150007.7487-3-srinivas.kandagatla@linaro.org Signed-off-by: Greg Kroah-Hartman (cherry picked from commit 5af25388ba250ae9624a22587cc98685dc6d4e9e) --- drivers/nvmem/sprd-efuse.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/drivers/nvmem/sprd-efuse.c b/drivers/nvmem/sprd-efuse.c index 7a189ef52333..43b3f6ef8c20 100644 --- a/drivers/nvmem/sprd-efuse.c +++ b/drivers/nvmem/sprd-efuse.c @@ -217,12 +217,14 @@ static int sprd_efuse_raw_prog(struct sprd_efuse *efuse, u32 blk, bool doub, * Enable the auto-check function to validate if the programming is * successful. */ - sprd_efuse_set_auto_check(efuse, true); + if (lock) + sprd_efuse_set_auto_check(efuse, true); writel(*data, efuse->base + SPRD_EFUSE_MEM(blk)); /* Disable auto-check and data double after programming */ - sprd_efuse_set_auto_check(efuse, false); + if (lock) + sprd_efuse_set_auto_check(efuse, false); sprd_efuse_set_data_double(efuse, false); /* @@ -237,7 +239,7 @@ static int sprd_efuse_raw_prog(struct sprd_efuse *efuse, u32 blk, bool doub, writel(SPRD_EFUSE_ERR_CLR_MASK, efuse->base + SPRD_EFUSE_ERR_CLR); ret = -EBUSY; - } else { + } else if (lock) { sprd_efuse_set_prog_lock(efuse, lock); writel(0, efuse->base + SPRD_EFUSE_MEM(blk)); sprd_efuse_set_prog_lock(efuse, false); @@ -322,6 +324,7 @@ static int sprd_efuse_read(void *context, u32 offset, void *val, size_t bytes) static int sprd_efuse_write(void *context, u32 offset, void *val, size_t bytes) { struct sprd_efuse *efuse = context; + bool lock; int ret; ret = sprd_efuse_lock(efuse); @@ -332,7 +335,20 @@ static int sprd_efuse_write(void *context, u32 offset, void *val, size_t bytes) if (ret) goto unlock; - ret = sprd_efuse_raw_prog(efuse, offset, false, false, val); + /* + * If the writing bytes are equal with the block width, which means the + * whole block will be programmed. For this case, we should not allow + * this block to be programmed again by locking this block. + * + * If the block was programmed partially, we should allow this block to + * be programmed again. + */ + if (bytes < SPRD_EFUSE_BLOCK_WIDTH) + lock = false; + else + lock = true; + + ret = sprd_efuse_raw_prog(efuse, offset, false, lock, val); clk_disable_unprepare(efuse->clk); From 88f0b4dcb5d0ef244c16e70ca9ae8c78f5ef9bbc Mon Sep 17 00:00:00 2001 From: Baolin Wang Date: Mon, 23 Mar 2020 15:00:05 +0000 Subject: [PATCH 070/136] UPSTREAM: nvmem: sprd: Determine double data programming from device data We've saved the double data flag in the device data, so we should use it when programming a block. bug: 153500755 Change-Id: I2d37f5ffcdc2a22c7cefa2d49d0c32001fb489e8 Signed-off-by: Baolin Wang Signed-off-by: Srinivas Kandagatla Link: https://lore.kernel.org/r/20200323150007.7487-4-srinivas.kandagatla@linaro.org Signed-off-by: Greg Kroah-Hartman (cherry picked from commit 4bd5a15d933c1703910c756d961dbbd2e6d52181) --- drivers/nvmem/sprd-efuse.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/nvmem/sprd-efuse.c b/drivers/nvmem/sprd-efuse.c index 43b3f6ef8c20..925feb21d5ad 100644 --- a/drivers/nvmem/sprd-efuse.c +++ b/drivers/nvmem/sprd-efuse.c @@ -324,6 +324,7 @@ static int sprd_efuse_read(void *context, u32 offset, void *val, size_t bytes) static int sprd_efuse_write(void *context, u32 offset, void *val, size_t bytes) { struct sprd_efuse *efuse = context; + bool blk_double = efuse->data->blk_double; bool lock; int ret; @@ -348,7 +349,7 @@ static int sprd_efuse_write(void *context, u32 offset, void *val, size_t bytes) else lock = true; - ret = sprd_efuse_raw_prog(efuse, offset, false, lock, val); + ret = sprd_efuse_raw_prog(efuse, offset, blk_double, lock, val); clk_disable_unprepare(efuse->clk); From def299a7a666f4499395045efdaddbf04581aba4 Mon Sep 17 00:00:00 2001 From: Linhua Xu Date: Wed, 25 Mar 2020 16:25:27 +0800 Subject: [PATCH 071/136] UPSTREAM: pinctrl: sprd: Use the correct pin output configuration The Spreadtrum pin controller did not supply registers to set high level or low level for output mode, instead we should let the pin controller current configuration drive values on the line. So we should use the PIN_CONFIG_OUTPUT_ENABLE configuration to enable or disable the output mode. bug: 153500755 Change-Id: I290165a7239ddf75281d9a4eaf357cd576f1d009 [Baolin Wang changes the commit message] Fixes: 41d32cfce1ae ("pinctrl: sprd: Add Spreadtrum pin control driver") Signed-off-by: Linhua Xu Signed-off-by: Baolin Wang Link: https://lore.kernel.org/r/8a6f91b49c17beb218e46b23084f59a7c7260f86.1585124562.git.baolin.wang7@gmail.com Signed-off-by: Linus Walleij (cherry picked from commit bb0f472f96fa2bda2c3e412cd84f16b15d992a56) --- drivers/pinctrl/sprd/pinctrl-sprd.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/pinctrl/sprd/pinctrl-sprd.c b/drivers/pinctrl/sprd/pinctrl-sprd.c index ea04bac3b453..8e396104ad1a 100644 --- a/drivers/pinctrl/sprd/pinctrl-sprd.c +++ b/drivers/pinctrl/sprd/pinctrl-sprd.c @@ -464,7 +464,7 @@ static int sprd_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin_id, case PIN_CONFIG_INPUT_ENABLE: arg = (reg >> SLEEP_INPUT_SHIFT) & SLEEP_INPUT_MASK; break; - case PIN_CONFIG_OUTPUT: + case PIN_CONFIG_OUTPUT_ENABLE: arg = reg & SLEEP_OUTPUT_MASK; break; case PIN_CONFIG_DRIVE_STRENGTH: @@ -635,9 +635,13 @@ static int sprd_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin_id, shift = SLEEP_INPUT_SHIFT; } break; - case PIN_CONFIG_OUTPUT: + case PIN_CONFIG_OUTPUT_ENABLE: if (is_sleep_config == true) { - val |= SLEEP_OUTPUT; + if (arg > 0) + val |= SLEEP_OUTPUT; + else + val &= ~SLEEP_OUTPUT; + mask = SLEEP_OUTPUT_MASK; shift = SLEEP_OUTPUT_SHIFT; } From 61130aced355836811c65110a050e853c6d95121 Mon Sep 17 00:00:00 2001 From: Linhua Xu Date: Wed, 25 Mar 2020 16:25:28 +0800 Subject: [PATCH 072/136] UPSTREAM: pinctrl: sprd: Add pin high impedance mode support For Spreadtrum pin controller, it will be the high impedance mode if disable input and output mode for a pin. Thus add PIN_CONFIG_BIAS_HIGH_IMPEDANCE configuration to support it. bug: 153500755 Change-Id: Ia5e1104a569da2a015d72a7db546ecc23bec5790 Signed-off-by: Linhua Xu Signed-off-by: Baolin Wang Link: https://lore.kernel.org/r/3bdac4c2673b54c940e511f3fa569ee33b87b8d5.1585124562.git.baolin.wang7@gmail.com Signed-off-by: Linus Walleij (cherry picked from commit 1592c4b9935fa8a3b7c297955bb872a357e5a3b6) --- drivers/pinctrl/sprd/pinctrl-sprd.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/pinctrl/sprd/pinctrl-sprd.c b/drivers/pinctrl/sprd/pinctrl-sprd.c index 8e396104ad1a..48cbf2a2837f 100644 --- a/drivers/pinctrl/sprd/pinctrl-sprd.c +++ b/drivers/pinctrl/sprd/pinctrl-sprd.c @@ -467,6 +467,12 @@ static int sprd_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin_id, case PIN_CONFIG_OUTPUT_ENABLE: arg = reg & SLEEP_OUTPUT_MASK; break; + case PIN_CONFIG_BIAS_HIGH_IMPEDANCE: + if ((reg & SLEEP_OUTPUT) || (reg & SLEEP_INPUT)) + return -EINVAL; + + arg = 1; + break; case PIN_CONFIG_DRIVE_STRENGTH: arg = (reg >> DRIVE_STRENGTH_SHIFT) & DRIVE_STRENGTH_MASK; @@ -646,6 +652,12 @@ static int sprd_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin_id, shift = SLEEP_OUTPUT_SHIFT; } break; + case PIN_CONFIG_BIAS_HIGH_IMPEDANCE: + if (is_sleep_config == true) { + val = shift = 0; + mask = SLEEP_OUTPUT | SLEEP_INPUT; + } + break; case PIN_CONFIG_DRIVE_STRENGTH: if (arg < 2 || arg > 60) return -EINVAL; From 5132c8af780d012e2ba96e06f88b516c3effe548 Mon Sep 17 00:00:00 2001 From: Baolin Wang Date: Wed, 1 Apr 2020 17:59:25 +0800 Subject: [PATCH 073/136] UPSTREAM: Revert "gpio: eic-sprd: Use devm_platform_ioremap_resource()" This reverts commit 0f5cb8cc27a266c81e6523b436479802e9aafc9e. This commit will cause below warnings, since our EIC controller can support differnt banks on different Spreadtrum SoCs, and each bank has its own base address, we will get invalid resource warning if the bank number is less than SPRD_EIC_MAX_BANK on some Spreadtrum SoCs. So we should not use devm_platform_ioremap_resource() here to remove the warnings. [ 1.118508] sprd-eic 40210000.gpio: invalid resource [ 1.118535] sprd-eic 40210000.gpio: invalid resource [ 1.119034] sprd-eic 40210080.gpio: invalid resource [ 1.119055] sprd-eic 40210080.gpio: invalid resource [ 1.119462] sprd-eic 402100a0.gpio: invalid resource [ 1.119482] sprd-eic 402100a0.gpio: invalid resource [ 1.119893] sprd-eic 402100c0.gpio: invalid resource [ 1.119913] sprd-eic 402100c0.gpio: invalid resource bug: 153500755 Change-Id: Iee84dfa1c7720cf53a13db8611650291f7e23b92 Signed-off-by: Baolin Wang Link: https://lore.kernel.org/r/8d3579f4b49bb675dc805035960f24852898be28.1585734060.git.baolin.wang7@gmail.com Signed-off-by: Linus Walleij (cherry picked from commit 4ed7d7dd4890bb8120a3e77c16191a695fdfcc5a) --- drivers/gpio/gpio-eic-sprd.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/gpio-eic-sprd.c b/drivers/gpio/gpio-eic-sprd.c index bb287f35cf40..8c9757774010 100644 --- a/drivers/gpio/gpio-eic-sprd.c +++ b/drivers/gpio/gpio-eic-sprd.c @@ -569,6 +569,7 @@ static int sprd_eic_probe(struct platform_device *pdev) const struct sprd_eic_variant_data *pdata; struct gpio_irq_chip *irq; struct sprd_eic *sprd_eic; + struct resource *res; int ret, i; pdata = of_device_get_match_data(&pdev->dev); @@ -595,9 +596,13 @@ static int sprd_eic_probe(struct platform_device *pdev) * have one bank EIC, thus base[1] and base[2] can be * optional. */ - sprd_eic->base[i] = devm_platform_ioremap_resource(pdev, i); - if (IS_ERR(sprd_eic->base[i])) + res = platform_get_resource(pdev, IORESOURCE_MEM, i); + if (!res) continue; + + sprd_eic->base[i] = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(sprd_eic->base[i])) + return PTR_ERR(sprd_eic->base[i]); } sprd_eic->chip.label = sprd_eic_label_name[sprd_eic->type]; From db03b1de8b84fcaf19c96a3500a7c38b56eff78f Mon Sep 17 00:00:00 2001 From: Baolin Wang Date: Mon, 17 Feb 2020 10:26:16 +0800 Subject: [PATCH 074/136] UPSTREAM: mfd: sc27xx: Add USB charger type detection support The Spreadtrum SC27XX series PMICs supply the USB charger type detection function, and related registers are located on the PMIC global registers region, thus we implement and export this function in the MFD driver for users to get the USB charger type. bug: 153500755 Change-Id: I18ef05b27c61ad915c86ddf26420fe92c8516552 Signed-off-by: Baolin Wang Signed-off-by: Lee Jones (cherry picked from commit 2a7e7274f3d43d2a072cab25c0035dc994903bb9) --- drivers/mfd/sprd-sc27xx-spi.c | 52 +++++++++++++++++++++++++++++++++ include/linux/mfd/sc27xx-pmic.h | 7 +++++ 2 files changed, 59 insertions(+) create mode 100644 include/linux/mfd/sc27xx-pmic.h diff --git a/drivers/mfd/sprd-sc27xx-spi.c b/drivers/mfd/sprd-sc27xx-spi.c index c0529a1cd5ea..ebdf2f11ae28 100644 --- a/drivers/mfd/sprd-sc27xx-spi.c +++ b/drivers/mfd/sprd-sc27xx-spi.c @@ -10,6 +10,7 @@ #include #include #include +#include #define SPRD_PMIC_INT_MASK_STATUS 0x0 #define SPRD_PMIC_INT_RAW_STATUS 0x4 @@ -17,6 +18,16 @@ #define SPRD_SC2731_IRQ_BASE 0x140 #define SPRD_SC2731_IRQ_NUMS 16 +#define SPRD_SC2731_CHG_DET 0xedc + +/* PMIC charger detection definition */ +#define SPRD_PMIC_CHG_DET_DELAY_US 200000 +#define SPRD_PMIC_CHG_DET_TIMEOUT 2000000 +#define SPRD_PMIC_CHG_DET_DONE BIT(11) +#define SPRD_PMIC_SDP_TYPE BIT(7) +#define SPRD_PMIC_DCP_TYPE BIT(6) +#define SPRD_PMIC_CDP_TYPE BIT(5) +#define SPRD_PMIC_CHG_TYPE_MASK GENMASK(7, 5) struct sprd_pmic { struct regmap *regmap; @@ -24,12 +35,14 @@ struct sprd_pmic { struct regmap_irq *irqs; struct regmap_irq_chip irq_chip; struct regmap_irq_chip_data *irq_data; + const struct sprd_pmic_data *pdata; int irq; }; struct sprd_pmic_data { u32 irq_base; u32 num_irqs; + u32 charger_det; }; /* @@ -40,8 +53,46 @@ struct sprd_pmic_data { static const struct sprd_pmic_data sc2731_data = { .irq_base = SPRD_SC2731_IRQ_BASE, .num_irqs = SPRD_SC2731_IRQ_NUMS, + .charger_det = SPRD_SC2731_CHG_DET, }; +enum usb_charger_type sprd_pmic_detect_charger_type(struct device *dev) +{ + struct spi_device *spi = to_spi_device(dev); + struct sprd_pmic *ddata = spi_get_drvdata(spi); + const struct sprd_pmic_data *pdata = ddata->pdata; + enum usb_charger_type type; + u32 val; + int ret; + + ret = regmap_read_poll_timeout(ddata->regmap, pdata->charger_det, val, + (val & SPRD_PMIC_CHG_DET_DONE), + SPRD_PMIC_CHG_DET_DELAY_US, + SPRD_PMIC_CHG_DET_TIMEOUT); + if (ret) { + dev_err(&spi->dev, "failed to detect charger type\n"); + return UNKNOWN_TYPE; + } + + switch (val & SPRD_PMIC_CHG_TYPE_MASK) { + case SPRD_PMIC_CDP_TYPE: + type = CDP_TYPE; + break; + case SPRD_PMIC_DCP_TYPE: + type = DCP_TYPE; + break; + case SPRD_PMIC_SDP_TYPE: + type = SDP_TYPE; + break; + default: + type = UNKNOWN_TYPE; + break; + } + + return type; +} +EXPORT_SYMBOL_GPL(sprd_pmic_detect_charger_type); + static const struct mfd_cell sprd_pmic_devs[] = { { .name = "sc27xx-wdt", @@ -181,6 +232,7 @@ static int sprd_pmic_probe(struct spi_device *spi) spi_set_drvdata(spi, ddata); ddata->dev = &spi->dev; ddata->irq = spi->irq; + ddata->pdata = pdata; ddata->irq_chip.name = dev_name(&spi->dev); ddata->irq_chip.status_base = diff --git a/include/linux/mfd/sc27xx-pmic.h b/include/linux/mfd/sc27xx-pmic.h new file mode 100644 index 000000000000..57e45c0b3ae2 --- /dev/null +++ b/include/linux/mfd/sc27xx-pmic.h @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __LINUX_MFD_SC27XX_PMIC_H +#define __LINUX_MFD_SC27XX_PMIC_H + +extern enum usb_charger_type sprd_pmic_detect_charger_type(struct device *dev); + +#endif /* __LINUX_MFD_SC27XX_PMIC_H */ From bb9227c9055852f6e1176628b72c95daca5316c7 Mon Sep 17 00:00:00 2001 From: Will McVicker Date: Tue, 7 Apr 2020 14:22:09 -0700 Subject: [PATCH 075/136] ANDROID: ignore compiler tag __must_check for GENKSYMS GENKSYMS shouldn't care about the __must_check compiler flag. So strip it out for GENKSYMS. Signed-off-by: Will McVicker Bug: 153478475 Test: compile, check crc Change-Id: I512639a4f719037728ffbfa48e7b766510c7d726 (cherry picked from commit a4923652a413e10e66d4802637c9e433e6944fc7) --- include/linux/compiler_types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h index a9baeafa207a..40d7f8992d4e 100644 --- a/include/linux/compiler_types.h +++ b/include/linux/compiler_types.h @@ -104,7 +104,7 @@ struct ftrace_likely_data { unsigned long constant; }; -#ifdef CONFIG_ENABLE_MUST_CHECK +#if defined(CONFIG_ENABLE_MUST_CHECK) && !defined(__GENKSYMS__) #define __must_check __attribute__((__warn_unused_result__)) #else #define __must_check From 4831f7ad6c569f2349a106cdb9eded1cc0383738 Mon Sep 17 00:00:00 2001 From: Kees Cook Date: Thu, 2 Apr 2020 01:18:37 -0700 Subject: [PATCH 076/136] FROMGIT: kbuild: mkcompile_h: Include $LD version in /proc/version When doing Clang builds of the kernel, it is possible to link with either ld.bfd (binutils) or ld.lld (LLVM), but it is not possible to discover this from a running kernel. Add the "$LD -v" output to /proc/version. Signed-off-by: Kees Cook Reviewed-by: Nick Desaulniers Tested-by: Nick Desaulniers Reviewed-by: Nathan Chancellor Tested-by: Nathan Chancellor Reviewed-by: Fangrui Song Reviewed-by: Sedat Dilek Tested-by: Sedat Dilek Signed-off-by: Masahiro Yamada Bug: 153484457 (cherry picked from commit 6f04f056df3c https://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git for-next) Change-Id: Ifa5a98fe159392862e8d07a733c0f141fa9c7715 Signed-off-by: Nick Desaulniers --- init/Makefile | 2 +- scripts/mkcompile_h | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/init/Makefile b/init/Makefile index 6246a06364d0..30aa8ab11120 100644 --- a/init/Makefile +++ b/init/Makefile @@ -35,4 +35,4 @@ include/generated/compile.h: FORCE @$($(quiet)chk_compile.h) $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \ "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" \ - "$(CONFIG_PREEMPT_RT)" "$(CC) $(KBUILD_CFLAGS)" + "$(CONFIG_PREEMPT_RT)" "$(CC) $(KBUILD_CFLAGS)" "$(LD)" diff --git a/scripts/mkcompile_h b/scripts/mkcompile_h index d1d757c6edf4..528edd041cdf 100755 --- a/scripts/mkcompile_h +++ b/scripts/mkcompile_h @@ -7,6 +7,7 @@ SMP=$3 PREEMPT=$4 PREEMPT_RT=$5 CC=$6 +LD=$7 vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; } @@ -74,7 +75,10 @@ UTS_TRUNCATE="cut -b -$UTS_LEN" echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\" echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\" - echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | grep ' version ' | sed 's/[[:space:]]*$//'`\" + CC_VERSION=$($CC -v 2>&1 | grep ' version ' | sed 's/[[:space:]]*$//') + LD_VERSION=$($LD -v | head -n1 | sed 's/(compatible with [^)]*)//' \ + | sed 's/[[:space:]]*$//') + printf '#define LINUX_COMPILER "%s"\n' "$CC_VERSION, $LD_VERSION" } > .tmpcompile # Only replace the real compile.h if the new one is different, From f4cfdfa01c017a81ef75196b69d84728a8b5ecaf Mon Sep 17 00:00:00 2001 From: Baolin Wang Date: Wed, 12 Feb 2020 12:12:56 +0800 Subject: [PATCH 077/136] UPSTREAM: mmc: Add MMC host software queue support Now the MMC read/write stack will always wait for previous request is completed by mmc_blk_rw_wait(), before sending a new request to hardware, or queue a work to complete request, that will bring context switching overhead and spend some extra time to poll the card for busy completion for I/O writes via sending CMD13, especially for high I/O per second rates, to affect the IO performance. Thus this patch introduces MMC software queue interface based on the hardware command queue engine's interfaces, which is similar with the hardware command queue engine's idea, that can remove the context switching. Moreover we set the default queue depth as 64 for software queue, which allows more requests to be prepared, merged and inserted into IO scheduler to improve performance, but we only allow 2 requests in flight, that is enough to let the irq handler always trigger the next request without a context switch, as well as avoiding a long latency. Moreover the host controller should support HW busy detection for I/O operations when enabling the host software queue. That means, the host controller must not complete a data transfer request, until after the card stops signals busy. From the fio testing data in cover letter, we can see the software queue can improve some performance with 4K block size, increasing about 16% for random read, increasing about 90% for random write, though no obvious improvement for sequential read and write. Moreover we can expand the software queue interface to support MMC packed request or packed command in future. bug: 151514181 Change-Id: Ib343d80bf060c2c6543e6038b474f3c5bf93dbb2 Reviewed-by: Arnd Bergmann Signed-off-by: Baolin Wang Signed-off-by: Baolin Wang Link: https://lore.kernel.org/r/4409c1586a9b3ed20d57ad2faf6c262fc3ccb6e2.1581478568.git.baolin.wang7@gmail.com Signed-off-by: Ulf Hansson (cherry picked from commit 511ce378e16f07b66ab78118587b7cc6ac197364) --- drivers/mmc/core/block.c | 61 +++++++ drivers/mmc/core/mmc.c | 18 +- drivers/mmc/core/queue.c | 22 ++- drivers/mmc/host/Kconfig | 11 ++ drivers/mmc/host/Makefile | 1 + drivers/mmc/host/cqhci.c | 8 +- drivers/mmc/host/mmc_hsq.c | 344 +++++++++++++++++++++++++++++++++++++ drivers/mmc/host/mmc_hsq.h | 30 ++++ include/linux/mmc/host.h | 3 + 9 files changed, 486 insertions(+), 12 deletions(-) create mode 100644 drivers/mmc/host/mmc_hsq.c create mode 100644 drivers/mmc/host/mmc_hsq.h diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index 95b41c0891d0..2af8c6045fa2 100644 --- a/drivers/mmc/core/block.c +++ b/drivers/mmc/core/block.c @@ -168,6 +168,11 @@ MODULE_PARM_DESC(perdev_minors, "Minors numbers to allocate per device"); static inline int mmc_blk_part_switch(struct mmc_card *card, unsigned int part_type); +static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq, + struct mmc_card *card, + int disable_multi, + struct mmc_queue *mq); +static void mmc_blk_hsq_req_done(struct mmc_request *mrq); static struct mmc_blk_data *mmc_blk_get(struct gendisk *disk) { @@ -1532,9 +1537,30 @@ static int mmc_blk_cqe_issue_flush(struct mmc_queue *mq, struct request *req) return mmc_blk_cqe_start_req(mq->card->host, mrq); } +static int mmc_blk_hsq_issue_rw_rq(struct mmc_queue *mq, struct request *req) +{ + struct mmc_queue_req *mqrq = req_to_mmc_queue_req(req); + struct mmc_host *host = mq->card->host; + int err; + + mmc_blk_rw_rq_prep(mqrq, mq->card, 0, mq); + mqrq->brq.mrq.done = mmc_blk_hsq_req_done; + mmc_pre_req(host, &mqrq->brq.mrq); + + err = mmc_cqe_start_req(host, &mqrq->brq.mrq); + if (err) + mmc_post_req(host, &mqrq->brq.mrq, err); + + return err; +} + static int mmc_blk_cqe_issue_rw_rq(struct mmc_queue *mq, struct request *req) { struct mmc_queue_req *mqrq = req_to_mmc_queue_req(req); + struct mmc_host *host = mq->card->host; + + if (host->hsq_enabled) + return mmc_blk_hsq_issue_rw_rq(mq, req); mmc_blk_data_prep(mq, mqrq, 0, NULL, NULL); @@ -1920,6 +1946,41 @@ static void mmc_blk_urgent_bkops(struct mmc_queue *mq, mmc_run_bkops(mq->card); } +static void mmc_blk_hsq_req_done(struct mmc_request *mrq) +{ + struct mmc_queue_req *mqrq = + container_of(mrq, struct mmc_queue_req, brq.mrq); + struct request *req = mmc_queue_req_to_req(mqrq); + struct request_queue *q = req->q; + struct mmc_queue *mq = q->queuedata; + struct mmc_host *host = mq->card->host; + unsigned long flags; + + if (mmc_blk_rq_error(&mqrq->brq) || + mmc_blk_urgent_bkops_needed(mq, mqrq)) { + spin_lock_irqsave(&mq->lock, flags); + mq->recovery_needed = true; + mq->recovery_req = req; + spin_unlock_irqrestore(&mq->lock, flags); + + host->cqe_ops->cqe_recovery_start(host); + + schedule_work(&mq->recovery_work); + return; + } + + mmc_blk_rw_reset_success(mq, req); + + /* + * Block layer timeouts race with completions which means the normal + * completion path cannot be used during recovery. + */ + if (mq->in_recovery) + mmc_blk_cqe_complete_rq(mq, req); + else + blk_mq_complete_request(req); +} + void mmc_blk_mq_complete(struct request *req) { struct mmc_queue *mq = req->q->queuedata; diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index b7159e243323..b975d6d0116f 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c @@ -1852,15 +1852,19 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, */ card->reenable_cmdq = card->ext_csd.cmdq_en; - if (card->ext_csd.cmdq_en && !host->cqe_enabled) { + if (host->cqe_ops && !host->cqe_enabled) { err = host->cqe_ops->cqe_enable(host, card); - if (err) { - pr_err("%s: Failed to enable CQE, error %d\n", - mmc_hostname(host), err); - } else { + if (!err) { host->cqe_enabled = true; - pr_info("%s: Command Queue Engine enabled\n", - mmc_hostname(host)); + + if (card->ext_csd.cmdq_en) { + pr_info("%s: Command Queue Engine enabled\n", + mmc_hostname(host)); + } else { + host->hsq_enabled = true; + pr_info("%s: Host Software Queue enabled\n", + mmc_hostname(host)); + } } } diff --git a/drivers/mmc/core/queue.c b/drivers/mmc/core/queue.c index 9edc08685e86..25bee3daf9e2 100644 --- a/drivers/mmc/core/queue.c +++ b/drivers/mmc/core/queue.c @@ -62,7 +62,7 @@ enum mmc_issue_type mmc_issue_type(struct mmc_queue *mq, struct request *req) { struct mmc_host *host = mq->card->host; - if (mq->use_cqe) + if (mq->use_cqe && !host->hsq_enabled) return mmc_cqe_issue_type(host, req); if (req_op(req) == REQ_OP_READ || req_op(req) == REQ_OP_WRITE) @@ -124,12 +124,14 @@ static enum blk_eh_timer_return mmc_mq_timed_out(struct request *req, { struct request_queue *q = req->q; struct mmc_queue *mq = q->queuedata; + struct mmc_card *card = mq->card; + struct mmc_host *host = card->host; unsigned long flags; int ret; spin_lock_irqsave(&mq->lock, flags); - if (mq->recovery_needed || !mq->use_cqe) + if (mq->recovery_needed || !mq->use_cqe || host->hsq_enabled) ret = BLK_EH_RESET_TIMER; else ret = mmc_cqe_timed_out(req); @@ -144,12 +146,13 @@ static void mmc_mq_recovery_handler(struct work_struct *work) struct mmc_queue *mq = container_of(work, struct mmc_queue, recovery_work); struct request_queue *q = mq->queue; + struct mmc_host *host = mq->card->host; mmc_get_card(mq->card, &mq->ctx); mq->in_recovery = true; - if (mq->use_cqe) + if (mq->use_cqe && !host->hsq_enabled) mmc_blk_cqe_recovery(mq); else mmc_blk_mq_recovery(mq); @@ -160,6 +163,9 @@ static void mmc_mq_recovery_handler(struct work_struct *work) mq->recovery_needed = false; spin_unlock_irq(&mq->lock); + if (host->hsq_enabled) + host->cqe_ops->cqe_recovery_finish(host); + mmc_put_card(mq->card, &mq->ctx); blk_mq_run_hw_queues(q, true); @@ -279,6 +285,14 @@ static blk_status_t mmc_mq_queue_rq(struct blk_mq_hw_ctx *hctx, } break; case MMC_ISSUE_ASYNC: + /* + * For MMC host software queue, we only allow 2 requests in + * flight to avoid a long latency. + */ + if (host->hsq_enabled && mq->in_flight[issue_type] > 2) { + spin_unlock_irq(&mq->lock); + return BLK_STS_RESOURCE; + } break; default: /* @@ -430,7 +444,7 @@ int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card) * The queue depth for CQE must match the hardware because the request * tag is used to index the hardware queue. */ - if (mq->use_cqe) + if (mq->use_cqe && !host->hsq_enabled) mq->tag_set.queue_depth = min_t(int, card->ext_csd.cmdq_depth, host->cqe_qdepth); else diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig index 49ea02c467bf..1c12344b88df 100644 --- a/drivers/mmc/host/Kconfig +++ b/drivers/mmc/host/Kconfig @@ -936,6 +936,17 @@ config MMC_CQHCI If unsure, say N. +config MMC_HSQ + tristate "MMC Host Software Queue support" + help + This selects the MMC Host Software Queue support. This may increase + performance, if the host controller and its driver supports it. + + If you have a controller/driver supporting this interface, say Y or M + here. + + If unsure, say N. + config MMC_TOSHIBA_PCI tristate "Toshiba Type A SD/MMC Card Interface Driver" depends on PCI diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile index 11c4598e91d9..c14b439da34b 100644 --- a/drivers/mmc/host/Makefile +++ b/drivers/mmc/host/Makefile @@ -98,6 +98,7 @@ obj-$(CONFIG_MMC_SDHCI_BRCMSTB) += sdhci-brcmstb.o obj-$(CONFIG_MMC_SDHCI_OMAP) += sdhci-omap.o obj-$(CONFIG_MMC_SDHCI_SPRD) += sdhci-sprd.o obj-$(CONFIG_MMC_CQHCI) += cqhci.o +obj-$(CONFIG_MMC_HSQ) += mmc_hsq.o ifeq ($(CONFIG_CB710_DEBUG),y) CFLAGS-cb710-mmc += -DDEBUG diff --git a/drivers/mmc/host/cqhci.c b/drivers/mmc/host/cqhci.c index 5047f7343ffc..e2ea2c4b6b94 100644 --- a/drivers/mmc/host/cqhci.c +++ b/drivers/mmc/host/cqhci.c @@ -321,14 +321,20 @@ static int cqhci_enable(struct mmc_host *mmc, struct mmc_card *card) struct cqhci_host *cq_host = mmc->cqe_private; int err; + if (!card->ext_csd.cmdq_en) + return -EINVAL; + if (cq_host->enabled) return 0; cq_host->rca = card->rca; err = cqhci_host_alloc_tdl(cq_host); - if (err) + if (err) { + pr_err("%s: Failed to enable CQE, error %d\n", + mmc_hostname(mmc), err); return err; + } __cqhci_enable(cq_host); diff --git a/drivers/mmc/host/mmc_hsq.c b/drivers/mmc/host/mmc_hsq.c new file mode 100644 index 000000000000..fc82593b9e27 --- /dev/null +++ b/drivers/mmc/host/mmc_hsq.c @@ -0,0 +1,344 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * + * MMC software queue support based on command queue interfaces + * + * Copyright (C) 2019 Linaro, Inc. + * Author: Baolin Wang + */ + +#include +#include + +#include "mmc_hsq.h" + +#define HSQ_NUM_SLOTS 64 +#define HSQ_INVALID_TAG HSQ_NUM_SLOTS + +static void mmc_hsq_pump_requests(struct mmc_hsq *hsq) +{ + struct mmc_host *mmc = hsq->mmc; + struct hsq_slot *slot; + unsigned long flags; + + spin_lock_irqsave(&hsq->lock, flags); + + /* Make sure we are not already running a request now */ + if (hsq->mrq) { + spin_unlock_irqrestore(&hsq->lock, flags); + return; + } + + /* Make sure there are remain requests need to pump */ + if (!hsq->qcnt || !hsq->enabled) { + spin_unlock_irqrestore(&hsq->lock, flags); + return; + } + + slot = &hsq->slot[hsq->next_tag]; + hsq->mrq = slot->mrq; + hsq->qcnt--; + + spin_unlock_irqrestore(&hsq->lock, flags); + + mmc->ops->request(mmc, hsq->mrq); +} + +static void mmc_hsq_update_next_tag(struct mmc_hsq *hsq, int remains) +{ + struct hsq_slot *slot; + int tag; + + /* + * If there are no remain requests in software queue, then set a invalid + * tag. + */ + if (!remains) { + hsq->next_tag = HSQ_INVALID_TAG; + return; + } + + /* + * Increasing the next tag and check if the corresponding request is + * available, if yes, then we found a candidate request. + */ + if (++hsq->next_tag != HSQ_INVALID_TAG) { + slot = &hsq->slot[hsq->next_tag]; + if (slot->mrq) + return; + } + + /* Othersie we should iterate all slots to find a available tag. */ + for (tag = 0; tag < HSQ_NUM_SLOTS; tag++) { + slot = &hsq->slot[tag]; + if (slot->mrq) + break; + } + + if (tag == HSQ_NUM_SLOTS) + tag = HSQ_INVALID_TAG; + + hsq->next_tag = tag; +} + +static void mmc_hsq_post_request(struct mmc_hsq *hsq) +{ + unsigned long flags; + int remains; + + spin_lock_irqsave(&hsq->lock, flags); + + remains = hsq->qcnt; + hsq->mrq = NULL; + + /* Update the next available tag to be queued. */ + mmc_hsq_update_next_tag(hsq, remains); + + if (hsq->waiting_for_idle && !remains) { + hsq->waiting_for_idle = false; + wake_up(&hsq->wait_queue); + } + + /* Do not pump new request in recovery mode. */ + if (hsq->recovery_halt) { + spin_unlock_irqrestore(&hsq->lock, flags); + return; + } + + spin_unlock_irqrestore(&hsq->lock, flags); + + /* + * Try to pump new request to host controller as fast as possible, + * after completing previous request. + */ + if (remains > 0) + mmc_hsq_pump_requests(hsq); +} + +/** + * mmc_hsq_finalize_request - finalize one request if the request is done + * @mmc: the host controller + * @mrq: the request need to be finalized + * + * Return true if we finalized the corresponding request in software queue, + * otherwise return false. + */ +bool mmc_hsq_finalize_request(struct mmc_host *mmc, struct mmc_request *mrq) +{ + struct mmc_hsq *hsq = mmc->cqe_private; + unsigned long flags; + + spin_lock_irqsave(&hsq->lock, flags); + + if (!hsq->enabled || !hsq->mrq || hsq->mrq != mrq) { + spin_unlock_irqrestore(&hsq->lock, flags); + return false; + } + + /* + * Clear current completed slot request to make a room for new request. + */ + hsq->slot[hsq->next_tag].mrq = NULL; + + spin_unlock_irqrestore(&hsq->lock, flags); + + mmc_cqe_request_done(mmc, hsq->mrq); + + mmc_hsq_post_request(hsq); + + return true; +} +EXPORT_SYMBOL_GPL(mmc_hsq_finalize_request); + +static void mmc_hsq_recovery_start(struct mmc_host *mmc) +{ + struct mmc_hsq *hsq = mmc->cqe_private; + unsigned long flags; + + spin_lock_irqsave(&hsq->lock, flags); + + hsq->recovery_halt = true; + + spin_unlock_irqrestore(&hsq->lock, flags); +} + +static void mmc_hsq_recovery_finish(struct mmc_host *mmc) +{ + struct mmc_hsq *hsq = mmc->cqe_private; + int remains; + + spin_lock_irq(&hsq->lock); + + hsq->recovery_halt = false; + remains = hsq->qcnt; + + spin_unlock_irq(&hsq->lock); + + /* + * Try to pump new request if there are request pending in software + * queue after finishing recovery. + */ + if (remains > 0) + mmc_hsq_pump_requests(hsq); +} + +static int mmc_hsq_request(struct mmc_host *mmc, struct mmc_request *mrq) +{ + struct mmc_hsq *hsq = mmc->cqe_private; + int tag = mrq->tag; + + spin_lock_irq(&hsq->lock); + + if (!hsq->enabled) { + spin_unlock_irq(&hsq->lock); + return -ESHUTDOWN; + } + + /* Do not queue any new requests in recovery mode. */ + if (hsq->recovery_halt) { + spin_unlock_irq(&hsq->lock); + return -EBUSY; + } + + hsq->slot[tag].mrq = mrq; + + /* + * Set the next tag as current request tag if no available + * next tag. + */ + if (hsq->next_tag == HSQ_INVALID_TAG) + hsq->next_tag = tag; + + hsq->qcnt++; + + spin_unlock_irq(&hsq->lock); + + mmc_hsq_pump_requests(hsq); + + return 0; +} + +static void mmc_hsq_post_req(struct mmc_host *mmc, struct mmc_request *mrq) +{ + if (mmc->ops->post_req) + mmc->ops->post_req(mmc, mrq, 0); +} + +static bool mmc_hsq_queue_is_idle(struct mmc_hsq *hsq, int *ret) +{ + bool is_idle; + + spin_lock_irq(&hsq->lock); + + is_idle = (!hsq->mrq && !hsq->qcnt) || + hsq->recovery_halt; + + *ret = hsq->recovery_halt ? -EBUSY : 0; + hsq->waiting_for_idle = !is_idle; + + spin_unlock_irq(&hsq->lock); + + return is_idle; +} + +static int mmc_hsq_wait_for_idle(struct mmc_host *mmc) +{ + struct mmc_hsq *hsq = mmc->cqe_private; + int ret; + + wait_event(hsq->wait_queue, + mmc_hsq_queue_is_idle(hsq, &ret)); + + return ret; +} + +static void mmc_hsq_disable(struct mmc_host *mmc) +{ + struct mmc_hsq *hsq = mmc->cqe_private; + u32 timeout = 500; + int ret; + + spin_lock_irq(&hsq->lock); + + if (!hsq->enabled) { + spin_unlock_irq(&hsq->lock); + return; + } + + spin_unlock_irq(&hsq->lock); + + ret = wait_event_timeout(hsq->wait_queue, + mmc_hsq_queue_is_idle(hsq, &ret), + msecs_to_jiffies(timeout)); + if (ret == 0) { + pr_warn("could not stop mmc software queue\n"); + return; + } + + spin_lock_irq(&hsq->lock); + + hsq->enabled = false; + + spin_unlock_irq(&hsq->lock); +} + +static int mmc_hsq_enable(struct mmc_host *mmc, struct mmc_card *card) +{ + struct mmc_hsq *hsq = mmc->cqe_private; + + spin_lock_irq(&hsq->lock); + + if (hsq->enabled) { + spin_unlock_irq(&hsq->lock); + return -EBUSY; + } + + hsq->enabled = true; + + spin_unlock_irq(&hsq->lock); + + return 0; +} + +static const struct mmc_cqe_ops mmc_hsq_ops = { + .cqe_enable = mmc_hsq_enable, + .cqe_disable = mmc_hsq_disable, + .cqe_request = mmc_hsq_request, + .cqe_post_req = mmc_hsq_post_req, + .cqe_wait_for_idle = mmc_hsq_wait_for_idle, + .cqe_recovery_start = mmc_hsq_recovery_start, + .cqe_recovery_finish = mmc_hsq_recovery_finish, +}; + +int mmc_hsq_init(struct mmc_hsq *hsq, struct mmc_host *mmc) +{ + hsq->num_slots = HSQ_NUM_SLOTS; + hsq->next_tag = HSQ_INVALID_TAG; + + hsq->slot = devm_kcalloc(mmc_dev(mmc), hsq->num_slots, + sizeof(struct hsq_slot), GFP_KERNEL); + if (!hsq->slot) + return -ENOMEM; + + hsq->mmc = mmc; + hsq->mmc->cqe_private = hsq; + mmc->cqe_ops = &mmc_hsq_ops; + + spin_lock_init(&hsq->lock); + init_waitqueue_head(&hsq->wait_queue); + + return 0; +} +EXPORT_SYMBOL_GPL(mmc_hsq_init); + +void mmc_hsq_suspend(struct mmc_host *mmc) +{ + mmc_hsq_disable(mmc); +} +EXPORT_SYMBOL_GPL(mmc_hsq_suspend); + +int mmc_hsq_resume(struct mmc_host *mmc) +{ + return mmc_hsq_enable(mmc, NULL); +} +EXPORT_SYMBOL_GPL(mmc_hsq_resume); diff --git a/drivers/mmc/host/mmc_hsq.h b/drivers/mmc/host/mmc_hsq.h new file mode 100644 index 000000000000..18b9cf55925f --- /dev/null +++ b/drivers/mmc/host/mmc_hsq.h @@ -0,0 +1,30 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef LINUX_MMC_HSQ_H +#define LINUX_MMC_HSQ_H + +struct hsq_slot { + struct mmc_request *mrq; +}; + +struct mmc_hsq { + struct mmc_host *mmc; + struct mmc_request *mrq; + wait_queue_head_t wait_queue; + struct hsq_slot *slot; + spinlock_t lock; + + int next_tag; + int num_slots; + int qcnt; + + bool enabled; + bool waiting_for_idle; + bool recovery_halt; +}; + +int mmc_hsq_init(struct mmc_hsq *hsq, struct mmc_host *mmc); +void mmc_hsq_suspend(struct mmc_host *mmc); +int mmc_hsq_resume(struct mmc_host *mmc); +bool mmc_hsq_finalize_request(struct mmc_host *mmc, struct mmc_request *mrq); + +#endif diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 4c5eb3aa8e72..94e3c87c1a58 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h @@ -463,6 +463,9 @@ struct mmc_host { bool cqe_enabled; bool cqe_on; + /* Host Software Queue support */ + bool hsq_enabled; + unsigned long private[0] ____cacheline_aligned; }; From ddc6f87e3dfb6a1b13d97b3ffb4b6614b9fd2f4e Mon Sep 17 00:00:00 2001 From: Baolin Wang Date: Wed, 12 Feb 2020 12:12:57 +0800 Subject: [PATCH 078/136] UPSTREAM: mmc: core: Enable the MMC host software queue for the SD card Enable the MMC host software queue for the SD card if the host controller supports the MMC host software queue. On my Spreadtrum platform, I did not see any obvious performance changes in 4K block size when changing to use hsq for the SD cards, I think the reason is the SD card works at a low speed on my platform, and most of time is spent in the hardware. But we can see some obvious improvements when enabling the packed request based on hsq, that's why we still add hsq support for the SD cards. bug: 151514181 Signed-off-by: Baolin Wang Signed-off-by: Baolin Wang Link: https://lore.kernel.org/r/0065b4631fef2d61c3b89d14a4ea4f2b7499ea56.1581478568.git.baolin.wang7@gmail.com Signed-off-by: Ulf Hansson (cherry picked from commit 045d705dc1fba0d881fe22ad76ebe1b44647cdac) Change-Id: Ib3a9b3b4363d168950981b0fb7c2cbaa4810dd00 --- drivers/mmc/core/sd.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c index fe914ff5f5d6..76c7add367d5 100644 --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c @@ -1082,6 +1082,16 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr, } } + if (host->cqe_ops && !host->cqe_enabled) { + err = host->cqe_ops->cqe_enable(host, card); + if (!err) { + host->cqe_enabled = true; + host->hsq_enabled = true; + pr_info("%s: Host Software Queue enabled\n", + mmc_hostname(host)); + } + } + if (host->caps2 & MMC_CAP2_AVOID_3_3V && host->ios.signal_voltage == MMC_SIGNAL_VOLTAGE_330) { pr_err("%s: Host failed to negotiate down from 3.3V\n", From 912dec18c29b3462a87c7e4d53b3cd32154ef97b Mon Sep 17 00:00:00 2001 From: Baolin Wang Date: Wed, 12 Feb 2020 12:12:58 +0800 Subject: [PATCH 079/136] UPSTREAM: mmc: host: sdhci: Add request_done ops for struct sdhci_ops Add request_done ops for struct sdhci_ops as a preparation in case some host controllers have different method to complete one request, such as supporting request completion of MMC software queue. bug: 151514181 Suggested-by: Adrian Hunter Signed-off-by: Baolin Wang Signed-off-by: Baolin Wang Link: https://lore.kernel.org/r/1539c801c8bbdbcd1d86f8c2dab375f5803c765a.1581478568.git.baolin.wang7@gmail.com Signed-off-by: Ulf Hansson (cherry picked from commit 1774b0021405b4d312499095f6d3919b5bdf3e3b) Change-Id: Ida382cff72fb6352be3fefc7ccf3166f48eb72fd --- drivers/mmc/host/sdhci.c | 12 ++++++++++-- drivers/mmc/host/sdhci.h | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 4478b94d4791..3347cb385a7f 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -2727,7 +2727,10 @@ static bool sdhci_request_done(struct sdhci_host *host) spin_unlock_irqrestore(&host->lock, flags); - mmc_request_done(host->mmc, mrq); + if (host->ops->request_done) + host->ops->request_done(host, mrq); + else + mmc_request_done(host->mmc, mrq); return false; } @@ -3155,7 +3158,12 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) /* Process mrqs ready for immediate completion */ for (i = 0; i < SDHCI_MAX_MRQS; i++) { - if (mrqs_done[i]) + if (!mrqs_done[i]) + continue; + + if (host->ops->request_done) + host->ops->request_done(host, mrqs_done[i]); + else mmc_request_done(host->mmc, mrqs_done[i]); } diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index fe83ece6965b..6a34ff95c609 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -646,6 +646,8 @@ struct sdhci_ops { void (*voltage_switch)(struct sdhci_host *host); void (*adma_write_desc)(struct sdhci_host *host, void **desc, dma_addr_t addr, int len, unsigned int cmd); + void (*request_done)(struct sdhci_host *host, + struct mmc_request *mrq); }; #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS From 52f444567453ca7b9ca424864ff67e9c8110e921 Mon Sep 17 00:00:00 2001 From: Baolin Wang Date: Wed, 12 Feb 2020 12:12:59 +0800 Subject: [PATCH 080/136] UPSTREAM: mmc: host: sdhci: Add a variable to defer to complete requests if needed When using the host software queue, it will trigger the next request in irq handler without a context switch. But the sdhci_request() can not be called in interrupt context when using host software queue for some host drivers, due to the get_cd() ops can be sleepable. But for some host drivers, such as Spreadtrum host driver, the card is nonremovable, so the get_cd() ops is not sleepable, which means we can complete the data request and trigger the next request in irq handler to remove the context switch for the Spreadtrum host driver. As suggested by Adrian, we should introduce a request_atomic() API to indicate that a request can be called in interrupt context to remove the context switch when using mmc host software queue. But this should be done in another thread to convert the users of mmc host software queue. Thus we can introduce a variable in struct sdhci_host to indicate that we will always to defer to complete requests when using the host software queue. bug: 151514181 Suggested-by: Adrian Hunter Signed-off-by: Baolin Wang Signed-off-by: Baolin Wang Link: https://lore.kernel.org/r/e693e7a29beb3c1922b333f4603ea81f43d5c5b1.1581478568.git.baolin.wang7@gmail.com Signed-off-by: Ulf Hansson (cherry picked from commit 4730831c7d2e28c2e912b2c71066b9cf072f7625) Change-Id: I81195265143e9bb8c850614950cdea0fe8032d6e --- drivers/mmc/host/sdhci.c | 2 +- drivers/mmc/host/sdhci.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 3347cb385a7f..c658b302dc2e 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -3033,7 +3033,7 @@ static inline bool sdhci_defer_done(struct sdhci_host *host, { struct mmc_data *data = mrq->data; - return host->pending_reset || + return host->pending_reset || host->always_defer_done || ((host->flags & SDHCI_REQ_USE_DMA) && data && data->host_cookie == COOKIE_MAPPED); } diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index 6a34ff95c609..d176b475fd49 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -535,6 +535,7 @@ struct sdhci_host { bool pending_reset; /* Cmd/data reset is pending */ bool irq_wake_enabled; /* IRQ wakeup is enabled */ bool v4_mode; /* Host Version 4 Enable */ + bool always_defer_done; /* Always defer to complete requests */ struct mmc_request *mrqs_done[SDHCI_MAX_MRQS]; /* Requests done */ struct mmc_command *cmd; /* Current command */ From d945faa624b8016b0dda38b3807d2a91a8664c00 Mon Sep 17 00:00:00 2001 From: Baolin Wang Date: Wed, 12 Feb 2020 12:13:00 +0800 Subject: [PATCH 081/136] UPSTREAM: mmc: host: sdhci-sprd: Add software queue support Add software queue support to improve the performance. bug: 151514181 Signed-off-by: Baolin Wang Signed-off-by: Baolin Wang Link: https://lore.kernel.org/r/f629b32943aae9e30ffa17acf4af06c270417001.1581478569.git.baolin.wang7@gmail.com Signed-off-by: Ulf Hansson (cherry picked from commit f4498549e1690af7cba1eff8570da9c134cb80b5) Change-Id: Idbe8c95844196ff4791f9517d800f0b94117f48d --- drivers/mmc/host/Kconfig | 1 + drivers/mmc/host/sdhci-sprd.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig index 1c12344b88df..90f1efc02eba 100644 --- a/drivers/mmc/host/Kconfig +++ b/drivers/mmc/host/Kconfig @@ -632,6 +632,7 @@ config MMC_SDHCI_SPRD depends on ARCH_SPRD depends on MMC_SDHCI_PLTFM select MMC_SDHCI_IO_ACCESSORS + select MMC_HSQ help This selects the SDIO Host Controller in Spreadtrum SoCs, this driver supports R11(IP version: R11P0). diff --git a/drivers/mmc/host/sdhci-sprd.c b/drivers/mmc/host/sdhci-sprd.c index d07b9793380f..d3462237bca2 100644 --- a/drivers/mmc/host/sdhci-sprd.c +++ b/drivers/mmc/host/sdhci-sprd.c @@ -19,6 +19,7 @@ #include #include "sdhci-pltfm.h" +#include "mmc_hsq.h" /* SDHCI_ARGUMENT2 register high 16bit */ #define SDHCI_SPRD_ARG2_STUFF GENMASK(31, 16) @@ -379,6 +380,16 @@ static unsigned int sdhci_sprd_get_ro(struct sdhci_host *host) return 0; } +static void sdhci_sprd_request_done(struct sdhci_host *host, + struct mmc_request *mrq) +{ + /* Validate if the request was from software queue firstly. */ + if (mmc_hsq_finalize_request(host->mmc, mrq)) + return; + + mmc_request_done(host->mmc, mrq); +} + static struct sdhci_ops sdhci_sprd_ops = { .read_l = sdhci_sprd_readl, .write_l = sdhci_sprd_writel, @@ -392,6 +403,7 @@ static struct sdhci_ops sdhci_sprd_ops = { .hw_reset = sdhci_sprd_hw_reset, .get_max_timeout_count = sdhci_sprd_get_max_timeout_count, .get_ro = sdhci_sprd_get_ro, + .request_done = sdhci_sprd_request_done, }; static void sdhci_sprd_request(struct mmc_host *mmc, struct mmc_request *mrq) @@ -521,6 +533,7 @@ static int sdhci_sprd_probe(struct platform_device *pdev) { struct sdhci_host *host; struct sdhci_sprd_host *sprd_host; + struct mmc_hsq *hsq; struct clk *clk; int ret = 0; @@ -631,6 +644,18 @@ static int sdhci_sprd_probe(struct platform_device *pdev) sprd_host->flags = host->flags; + hsq = devm_kzalloc(&pdev->dev, sizeof(*hsq), GFP_KERNEL); + if (!hsq) { + ret = -ENOMEM; + goto err_cleanup_host; + } + + ret = mmc_hsq_init(hsq, host->mmc); + if (ret) + goto err_cleanup_host; + + host->always_defer_done = true; + ret = __sdhci_add_host(host); if (ret) goto err_cleanup_host; @@ -689,6 +714,7 @@ static int sdhci_sprd_runtime_suspend(struct device *dev) struct sdhci_host *host = dev_get_drvdata(dev); struct sdhci_sprd_host *sprd_host = TO_SPRD_HOST(host); + mmc_hsq_suspend(host->mmc); sdhci_runtime_suspend_host(host); clk_disable_unprepare(sprd_host->clk_sdio); @@ -717,6 +743,8 @@ static int sdhci_sprd_runtime_resume(struct device *dev) goto clk_disable; sdhci_runtime_resume_host(host, 1); + mmc_hsq_resume(host->mmc); + return 0; clk_disable: From badf0ca625350d93cd003d415afffa2742b9d751 Mon Sep 17 00:00:00 2001 From: Baolin Wang Date: Thu, 20 Feb 2020 09:30:01 +0800 Subject: [PATCH 082/136] UPSTREAM: mmc: host: hsq: Add missing MODULE_LICENSE() and MODULE_DESCRIPTION() Add missing MODULE_LICENSE() and MODULE_DESCRIPTION() in hsq driver to fix below warning when compiling the hsq as a module. "WARNING: modpost: missing MODULE_LICENSE() in drivers/mmc/host/mmc_hsq.o". bug: 151514181 Reported-by: Stephen Rothwell Signed-off-by: Baolin Wang Link: https://lore.kernel.org/r/98ce471185f037fce57520763621590588766381.1582161803.git.baolin.wang7@gmail.com Signed-off-by: Ulf Hansson (cherry picked from commit d1709abb8cc39640e9647b3c0df4451d71bf2841) Change-Id: Iab828050cccfc59d9a1005554943f32859599acd --- drivers/mmc/host/mmc_hsq.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/mmc/host/mmc_hsq.c b/drivers/mmc/host/mmc_hsq.c index fc82593b9e27..b90b2c97b6cf 100644 --- a/drivers/mmc/host/mmc_hsq.c +++ b/drivers/mmc/host/mmc_hsq.c @@ -9,6 +9,7 @@ #include #include +#include #include "mmc_hsq.h" @@ -342,3 +343,6 @@ int mmc_hsq_resume(struct mmc_host *mmc) return mmc_hsq_enable(mmc, NULL); } EXPORT_SYMBOL_GPL(mmc_hsq_resume); + +MODULE_DESCRIPTION("MMC Host Software Queue support"); +MODULE_LICENSE("GPL v2"); From 56e481a490838c15898b3d9b9b935eccb0cacf88 Mon Sep 17 00:00:00 2001 From: Baolin Wang Date: Mon, 24 Feb 2020 17:08:49 +0800 Subject: [PATCH 083/136] UPSTREAM: mmc: sdhci-sprd: Set the missing MMC_CAP_WAIT_WHILE_BUSY flag The Spreadtrum host controller supports HW busy detection for commands with R1B responses, but also for I/O operations. This means when the host gets a transfer complete event, that always indicates the busy signal is released. Let's inform the mmc core about this, via setting the corresponding MMC_CAP_WAIT_WHILE_BUSY flag, as to remove some redundant software busy polling. bug: 151514181 Signed-off-by: Baolin Wang Acked-by: Adrian Hunter Link: https://lore.kernel.org/r/96f16647f6a6e8cb058c44e46c61b122df027059.1582535202.git.baolin.wang7@gmail.com Signed-off-by: Ulf Hansson (cherry picked from commit 55fc7d93a55b70c016982f9d9cba02ac789d88c6) Change-Id: I3d7bc139aa5dd6f3949ce2f59626f426e7271708 --- drivers/mmc/host/sdhci-sprd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/mmc/host/sdhci-sprd.c b/drivers/mmc/host/sdhci-sprd.c index d3462237bca2..2ab42c59e4f8 100644 --- a/drivers/mmc/host/sdhci-sprd.c +++ b/drivers/mmc/host/sdhci-sprd.c @@ -556,7 +556,7 @@ static int sdhci_sprd_probe(struct platform_device *pdev) sdhci_sprd_voltage_switch; host->mmc->caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED | - MMC_CAP_ERASE | MMC_CAP_CMD23; + MMC_CAP_ERASE | MMC_CAP_CMD23 | MMC_CAP_WAIT_WHILE_BUSY; ret = mmc_of_parse(host->mmc); if (ret) goto pltfm_free; From 0ec411877b9364f36f333adf6e2327c2c3e2c5cf Mon Sep 17 00:00:00 2001 From: Todd Kjos Date: Wed, 8 Apr 2020 08:31:38 -0700 Subject: [PATCH 084/136] ANDROID: GKI: update ABI for mmc changes Leaf changes summary: 3 artifacts changed Changed leaf types summary: 3 leaf types changed Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 0 Added function Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable 'struct mmc_host at host.h:271:1' changed: type size hasn't changed 1 data member insertion: 'bool mmc_host::hsq_enabled', at offset 12272 (in bits) at host.h:467:1 86 impacted interfaces: function int __mmc_claim_host(mmc_host*, mmc_ctx*, atomic_t*) function int __mmc_send_status(mmc_card*, u32*, unsigned int) function int __sdhci_add_host(sdhci_host*) function int mmc_add_host(mmc_host*) function mmc_host* mmc_alloc_host(int, device*) function int mmc_app_cmd(mmc_host*, mmc_card*) function unsigned int mmc_calc_max_discard(mmc_card*) function int mmc_can_erase(mmc_card*) function bool mmc_can_gpio_cd(mmc_host*) function int mmc_can_sanitize(mmc_card*) function int mmc_can_secure_erase_trim(mmc_card*) function int mmc_can_trim(mmc_card*) function int mmc_cmdq_disable(mmc_card*) function int mmc_cmdq_enable(mmc_card*) function void mmc_cqe_post_req(mmc_host*, mmc_request*) function int mmc_cqe_recovery(mmc_host*) function int mmc_cqe_start_req(mmc_host*, mmc_request*) function int mmc_detect_card_removed(mmc_host*) function void mmc_detect_change(mmc_host*, unsigned long int) function int mmc_erase(mmc_card*, unsigned int, unsigned int, unsigned int) function int mmc_erase_group_aligned(mmc_card*, unsigned int, unsigned int) function int mmc_flush_cache(mmc_card*) function void mmc_free_host(mmc_host*) function void mmc_get_card(mmc_card*, mmc_ctx*) function int mmc_get_ext_csd(mmc_card*, unsigned char**) function int mmc_gpio_get_cd(mmc_host*) function int mmc_gpio_get_ro(mmc_host*) function int mmc_gpiod_request_cd(mmc_host*, const char*, unsigned int, bool, unsigned int, bool*) function void mmc_gpiod_request_cd_irq(mmc_host*) function int mmc_gpiod_request_ro(mmc_host*, const char*, unsigned int, unsigned int, bool*) function int mmc_hw_reset(mmc_host*) function int mmc_of_parse(mmc_host*) function void mmc_put_card(mmc_card*, mmc_ctx*) function int mmc_register_driver(mmc_driver*) function int mmc_regulator_get_supply(mmc_host*) function int mmc_regulator_set_ocr(mmc_host*, regulator*, unsigned short int) function int mmc_regulator_set_vqmmc(mmc_host*, mmc_ios*) function void mmc_release_host(mmc_host*) function void mmc_remove_host(mmc_host*) function void mmc_request_done(mmc_host*, mmc_request*) function void mmc_retune_pause(mmc_host*) function void mmc_retune_release(mmc_host*) function void mmc_retune_unpause(mmc_host*) function void mmc_run_bkops(mmc_card*) function int mmc_send_status(mmc_card*, unsigned int*) function int mmc_send_tuning(mmc_host*, u32, int*) function void mmc_set_data_timeout(mmc_data*, const mmc_card*) function int mmc_start_request(mmc_host*, mmc_request*) function int mmc_switch(mmc_card*, unsigned char, unsigned char, unsigned char, unsigned int) function void mmc_unregister_driver(mmc_driver*) function int mmc_wait_for_cmd(mmc_host*, mmc_command*, int) function void mmc_wait_for_req(mmc_host*, mmc_request*) function int sdhci_add_host(sdhci_host*) function void sdhci_cleanup_host(sdhci_host*) function void sdhci_enable_clk(sdhci_host*, u16) function void sdhci_enable_v4_mode(sdhci_host*) function sdhci_host* sdhci_pltfm_init(platform_device*, const sdhci_pltfm_data*, size_t) function void sdhci_remove_host(sdhci_host*, int) function void sdhci_request(mmc_host*, mmc_request*) function void sdhci_reset(sdhci_host*, u8) function int sdhci_runtime_resume_host(sdhci_host*, int) function int sdhci_runtime_suspend_host(sdhci_host*) function void sdhci_set_bus_width(sdhci_host*, int) function int sdhci_setup_host(sdhci_host*) function void sdio_claim_host(sdio_func*) function int sdio_claim_irq(sdio_func*, sdio_irq_handler_t*) function int sdio_disable_func(sdio_func*) function int sdio_enable_func(sdio_func*) function unsigned char sdio_f0_readb(sdio_func*, unsigned int, int*) function void sdio_f0_writeb(sdio_func*, unsigned char, unsigned int, int*) function mmc_pm_flag_t sdio_get_host_pm_caps(sdio_func*) function int sdio_memcpy_fromio(sdio_func*, void*, unsigned int, int) function int sdio_memcpy_toio(sdio_func*, unsigned int, void*, int) function u8 sdio_readb(sdio_func*, unsigned int, int*) function u32 sdio_readl(sdio_func*, unsigned int, int*) function int sdio_readsb(sdio_func*, void*, unsigned int, int) function int sdio_register_driver(sdio_driver*) function void sdio_release_host(sdio_func*) function int sdio_release_irq(sdio_func*) function int sdio_set_block_size(sdio_func*, unsigned int) function int sdio_set_host_pm_flags(sdio_func*, mmc_pm_flag_t) function void sdio_signal_irq(mmc_host*) function void sdio_unregister_driver(sdio_driver*) function void sdio_writeb(sdio_func*, u8, unsigned int, int*) function void sdio_writel(sdio_func*, u32, unsigned int, int*) function int sdio_writesb(sdio_func*, unsigned int, void*, int) 'struct sdhci_host at sdhci.h:372:1' changed: type size hasn't changed 1 data member insertion: 'bool sdhci_host::always_defer_done', at offset 5400 (in bits) at sdhci.h:538:1 12 impacted interfaces: function int __sdhci_add_host(sdhci_host*) function int sdhci_add_host(sdhci_host*) function void sdhci_cleanup_host(sdhci_host*) function void sdhci_enable_clk(sdhci_host*, u16) function void sdhci_enable_v4_mode(sdhci_host*) function sdhci_host* sdhci_pltfm_init(platform_device*, const sdhci_pltfm_data*, size_t) function void sdhci_remove_host(sdhci_host*, int) function void sdhci_reset(sdhci_host*, u8) function int sdhci_runtime_resume_host(sdhci_host*, int) function int sdhci_runtime_suspend_host(sdhci_host*) function void sdhci_set_bus_width(sdhci_host*, int) function int sdhci_setup_host(sdhci_host*) 'struct sdhci_ops at sdhci.h:611:1' changed: type size changed from 1728 to 1792 (in bits) 1 data member insertion: 'void ()* sdhci_ops::request_done', at offset 1728 (in bits) at sdhci.h:650:1 12 impacted interfaces: function int __sdhci_add_host(sdhci_host*) function int sdhci_add_host(sdhci_host*) function void sdhci_cleanup_host(sdhci_host*) function void sdhci_enable_clk(sdhci_host*, u16) function void sdhci_enable_v4_mode(sdhci_host*) function sdhci_host* sdhci_pltfm_init(platform_device*, const sdhci_pltfm_data*, size_t) function void sdhci_remove_host(sdhci_host*, int) function void sdhci_reset(sdhci_host*, u8) function int sdhci_runtime_resume_host(sdhci_host*, int) function int sdhci_runtime_suspend_host(sdhci_host*) function void sdhci_set_bus_width(sdhci_host*, int) function int sdhci_setup_host(sdhci_host*) Bug: 151514181 Signed-off-by: Todd Kjos Change-Id: I08c570140f576438d01c26aca41f5ffb3525628d --- abi_gki_aarch64.xml | 32535 +++++++++++++++++++++--------------------- 1 file changed, 16238 insertions(+), 16297 deletions(-) diff --git a/abi_gki_aarch64.xml b/abi_gki_aarch64.xml index c820733427a7..a847816be9bd 100644 --- a/abi_gki_aarch64.xml +++ b/abi_gki_aarch64.xml @@ -15510,18 +15510,7 @@ - - - - - - - - - - - - + @@ -15529,45 +15518,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -15579,7 +15568,7 @@ - + @@ -15591,20 +15580,20 @@ - + - + - + - - - + + + @@ -15624,7 +15613,7 @@ - + @@ -15632,34 +15621,34 @@ - + - + - + - + - + - + - + - + - + - - + + @@ -15667,8 +15656,8 @@ - - + + @@ -15676,8 +15665,8 @@ - - + + @@ -15700,14 +15689,14 @@ - - + + - - + + @@ -15715,8 +15704,8 @@ - - + + @@ -15727,8 +15716,8 @@ - - + + @@ -15742,7 +15731,7 @@ - + @@ -15816,7 +15805,7 @@ - + @@ -15851,7 +15840,7 @@ - + @@ -15877,7 +15866,7 @@ - + @@ -15885,7 +15874,7 @@ - + @@ -15902,12 +15891,12 @@ - + - + @@ -15916,7 +15905,7 @@ - + @@ -15939,18 +15928,18 @@ - + - + - + - + @@ -15959,7 +15948,7 @@ - + @@ -15980,10 +15969,10 @@ - + - + @@ -16000,7 +15989,7 @@ - + @@ -16008,15 +15997,15 @@ - + - + - + - + @@ -16026,9 +16015,9 @@ - + - + @@ -16038,20 +16027,20 @@ - + - + - + - + - + @@ -16059,18 +16048,18 @@ - + - + - + - + - + @@ -16079,18 +16068,18 @@ - + - + - + - + @@ -16120,10 +16109,10 @@ - + - + @@ -16144,72 +16133,72 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -16247,7 +16236,7 @@ - + @@ -16255,7 +16244,7 @@ - + @@ -16293,7 +16282,7 @@ - + @@ -16307,7 +16296,7 @@ - + @@ -16318,7 +16307,7 @@ - + @@ -16338,7 +16327,7 @@ - + @@ -16346,7 +16335,7 @@ - + @@ -16375,7 +16364,7 @@ - + @@ -16386,14 +16375,14 @@ - + - - + + @@ -16422,7 +16411,7 @@ - + @@ -16430,31 +16419,31 @@ - + - + - + - + - + - + - + - + - + @@ -16462,7 +16451,7 @@ - + @@ -16470,7 +16459,7 @@ - + @@ -16531,7 +16520,7 @@ - + @@ -16544,7 +16533,7 @@ - + @@ -16560,9 +16549,9 @@ - + - + @@ -16573,7 +16562,7 @@ - + @@ -16592,25 +16581,25 @@ - + - + - + - + - + - + - + @@ -16624,13 +16613,13 @@ - + - + - + @@ -16638,72 +16627,72 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -16712,103 +16701,103 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -16846,7 +16835,7 @@ - + @@ -16860,7 +16849,7 @@ - + @@ -16874,7 +16863,7 @@ - + @@ -16891,7 +16880,7 @@ - + @@ -16962,7 +16951,7 @@ - + @@ -16991,7 +16980,7 @@ - + @@ -17005,7 +16994,7 @@ - + @@ -17019,17 +17008,17 @@ - + - + - + @@ -17037,10 +17026,10 @@ - + - + @@ -17051,30 +17040,30 @@ - + - + - + - + - + - + - + @@ -17083,51 +17072,51 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -17144,7 +17133,7 @@ - + @@ -17158,7 +17147,7 @@ - + @@ -17178,12 +17167,12 @@ - + - + - + @@ -17195,12 +17184,12 @@ - + - + - + @@ -17209,12 +17198,12 @@ - + - + - + @@ -17226,7 +17215,7 @@ - + @@ -17237,7 +17226,7 @@ - + @@ -17254,7 +17243,7 @@ - + @@ -17262,7 +17251,7 @@ - + @@ -17273,7 +17262,7 @@ - + @@ -17302,7 +17291,7 @@ - + @@ -17319,7 +17308,7 @@ - + @@ -17342,7 +17331,7 @@ - + @@ -17356,7 +17345,7 @@ - + @@ -17385,7 +17374,7 @@ - + @@ -17402,15 +17391,15 @@ - + - + - + - + @@ -17445,7 +17434,7 @@ - + @@ -17454,7 +17443,7 @@ - + @@ -17465,7 +17454,7 @@ - + @@ -17479,27 +17468,27 @@ - + - + - + - + - + - + - + - + @@ -17518,27 +17507,27 @@ - + - + - + - + - + - + - + @@ -17549,7 +17538,7 @@ - + @@ -17571,9 +17560,9 @@ - + - + @@ -17582,21 +17571,21 @@ - + - - - + + + - + - + @@ -17614,10 +17603,10 @@ - + - + @@ -17632,10 +17621,10 @@ - + - + @@ -17676,7 +17665,7 @@ - + @@ -17684,7 +17673,7 @@ - + @@ -17712,13 +17701,13 @@ - - + + - + - + @@ -17726,10 +17715,10 @@ - + - + @@ -17743,10 +17732,10 @@ - + - + @@ -17756,241 +17745,241 @@ - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - + @@ -18010,687 +17999,687 @@ - + - - - + + + - - - + + + + + + + - + + - + + - + + - - - - - - - - + + + + + + - + + - - - - - - - + - - - - - + + + + + - - + + - - + + - - - + + + - - + + - - + + - + - + - - - - + + + + + + + + + + + + + + - - - - - - - + - - - - - + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + + + + + - + - - + + - - - - - - - + + - - - + + + - - - + + + + + + + + - + - + - + - + - - + + - + - - - - - - - + + + + + + + - + - - + + - + + - - + - + + - + - + + - - + + - - - + + - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - + + - + + + + + + - - + + - - + + - - + + + - - - + + - + - - + + + - - + + + - - - - - - - - + - - + + - - + + - - + + - - + + + + + + + + - + + - - - - + + - + + + - - - - - - - - + - - + + - - + + - + - + + + + + + - + + + + - - - - - - - - - - + + - + - + - + - - - + + + - - + + - + - - + + + + + + + - + + - - - - - - - + - - - + + + - - + + - + + + + + + - - + - - - - - - + + - - + + - - + + - + - - - + + + + + + + - + + - - + + - - + + - + - - - - - + + + + + - - + + + - + - - - + + - - - - - - + + + + + + - - + + - - - - - - + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - + @@ -18703,13 +18692,13 @@ - + - + - + @@ -18744,11 +18733,11 @@ - - + + - + @@ -18762,9 +18751,9 @@ - + - + @@ -18785,7 +18774,7 @@ - + @@ -18794,16 +18783,16 @@ - + - + - + - + @@ -18812,55 +18801,55 @@ - - - + + + - + - + - + - + - + - + - + - + - - + + - + @@ -18904,7 +18893,7 @@ - + @@ -18915,7 +18904,7 @@ - + @@ -18926,19 +18915,19 @@ - + - + - + @@ -18946,15 +18935,15 @@ - + - + - + @@ -18984,7 +18973,7 @@ - + @@ -19004,7 +18993,7 @@ - + @@ -19027,10 +19016,10 @@ - - + + - + @@ -19042,7 +19031,7 @@ - + @@ -19060,10 +19049,10 @@ - + - + @@ -19090,7 +19079,7 @@ - + @@ -19098,7 +19087,7 @@ - + @@ -19115,33 +19104,33 @@ - - + + - - + + - + - + - + - - + + + - - + @@ -19156,21 +19145,21 @@ - + - + - + - + @@ -19178,7 +19167,7 @@ - + @@ -19186,40 +19175,40 @@ - + - + - + - + - + - + - + @@ -19236,27 +19225,27 @@ - + - + - + - + - + - + - + @@ -19265,7 +19254,7 @@ - + @@ -19273,13 +19262,13 @@ - + - + - + @@ -19290,7 +19279,7 @@ - + @@ -19307,70 +19296,70 @@ - + - + - + - + - + - + - + - + - + - - - - - + + + + + - - + + - + - - + + - + - + @@ -19379,24 +19368,24 @@ - - + + - + - + - + - - + + @@ -19407,26 +19396,26 @@ - + - + - + - + - + @@ -19440,78 +19429,78 @@ - + - - + + - - + + - + - + - + - + - - + + - + - - + + - + - - + + - + - + @@ -19524,7 +19513,7 @@ - + @@ -19535,37 +19524,37 @@ - + - + - + - + - + - + - - - - - + + + + + @@ -19575,7 +19564,7 @@ - + @@ -19583,21 +19572,21 @@ - + - - + + - + - + @@ -19605,16 +19594,16 @@ - - + + - - + + - - + + @@ -19707,22 +19696,22 @@ - + - + - + - + - + @@ -19730,7 +19719,7 @@ - + @@ -19739,15 +19728,15 @@ - + - + - - + + @@ -19766,7 +19755,7 @@ - + @@ -19775,61 +19764,61 @@ - + - + - + - + - - + + - + - + - + - + - - - + + + - + - + @@ -19840,7 +19829,7 @@ - + @@ -19900,7 +19889,7 @@ - + @@ -19912,16 +19901,16 @@ - + - + - + @@ -19929,7 +19918,7 @@ - + @@ -19937,10 +19926,10 @@ - + - + @@ -19963,24 +19952,24 @@ - + - + - + - + - + @@ -20022,51 +20011,51 @@ - - - - - - - + + + + + + + - + - - + + - + - + - - + + - + - + - - + + @@ -20074,28 +20063,28 @@ - - + + - + - - - - + + + + - + - + - + @@ -20131,16 +20120,16 @@ - + - + - + - + @@ -20175,10 +20164,10 @@ - + - + @@ -20193,31 +20182,31 @@ - + - + - + - + - + - + - + @@ -20226,7 +20215,7 @@ - + @@ -20256,52 +20245,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -20310,10 +20299,10 @@ - + - + @@ -20330,10 +20319,10 @@ - + - + @@ -20372,12 +20361,12 @@ - + - + @@ -20407,7 +20396,7 @@ - + @@ -20442,92 +20431,92 @@ - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - + + + + + + - + + + - - - + + - - - - - - + + + + + - + + - - - - - - - - - + + + + - - + + + + + + + - - + - - - - - + - - + + @@ -20535,16 +20524,16 @@ - - + + - + - + - + @@ -20559,10 +20548,10 @@ - + - + @@ -20592,49 +20581,49 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -20655,10 +20644,10 @@ - + - + @@ -20682,7 +20671,7 @@ - + @@ -20697,7 +20686,7 @@ - + @@ -20724,12 +20713,12 @@ - + - - - + + + @@ -20743,60 +20732,60 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -20805,48 +20794,48 @@ - - - - + + + + - + - - - - - - - + + + + + + + - + - + - + - + @@ -20854,40 +20843,40 @@ - + - + - + - + - + - + - + - + - + - + @@ -20895,7 +20884,7 @@ - + @@ -20906,7 +20895,7 @@ - + @@ -20923,40 +20912,40 @@ - + - + - + - + - + - + - + - + - + - + @@ -20965,31 +20954,31 @@ - + - + - + - + - + - + - + - + @@ -21016,13 +21005,13 @@ - + - + - + @@ -21037,7 +21026,7 @@ - + @@ -21063,9 +21052,9 @@ - + - + @@ -21083,7 +21072,7 @@ - + @@ -21100,93 +21089,93 @@ + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - + + + + + + + - - + - + - + - - + + - + - - + + - + - - + + - + - + - - - + + + - + - + @@ -21195,84 +21184,92 @@ - + - - + + - + - + - + - + - + + + + + - + + + - - + + - + + - - + - + + - - - + + + + @@ -21281,63 +21278,55 @@ + - - - - - - - - + + - - - - + - + - - + + - + - + - + - + - + - + @@ -21360,14 +21349,14 @@ - - + + - - + + - + @@ -21379,30 +21368,30 @@ - + - - - - - - + + + + + + - + - - + + - + @@ -21411,7 +21400,7 @@ - + @@ -21424,7 +21413,7 @@ - + @@ -21478,7 +21467,7 @@ - + @@ -21494,12 +21483,12 @@ - + - + @@ -21509,13 +21498,13 @@ - + - + @@ -21524,7 +21513,7 @@ - + @@ -21541,29 +21530,29 @@ - + - + - - + + - + - + @@ -21572,47 +21561,47 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -21630,49 +21619,49 @@ - - + + + - - + - + - + - - + + - - + + - - + + - - + + - - + + - + @@ -21689,57 +21678,57 @@ - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -21747,34 +21736,34 @@ - - - + + + - + - + - - + + - + - - + + - + @@ -21783,13 +21772,13 @@ - + - + @@ -21798,10 +21787,10 @@ - + - + @@ -21813,16 +21802,16 @@ - + - + - + @@ -21832,42 +21821,42 @@ - + - + - - - + + + - + - + - + - + - + - + - + @@ -21876,87 +21865,87 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -21970,10 +21959,10 @@ - + - + @@ -21981,9 +21970,9 @@ - + - + @@ -21995,35 +21984,36 @@ - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + - + @@ -22037,11 +22027,11 @@ - + - + @@ -22050,80 +22040,80 @@ - - + + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - - + + - + - + @@ -22136,7 +22126,7 @@ - + @@ -22149,59 +22139,59 @@ - + - - + + - + - - + + - + - + - + - + - + - + - + - - + + - - + + - - + + @@ -22209,73 +22199,73 @@ - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -22326,8 +22316,8 @@ - - + + @@ -22355,9 +22345,9 @@ - + - + @@ -22493,7 +22483,7 @@ - + @@ -23061,17 +23051,17 @@ - + - + - + @@ -23119,7 +23109,7 @@ - + @@ -23155,7 +23145,7 @@ - + @@ -23567,7 +23557,7 @@ - + @@ -23652,7 +23642,7 @@ - + @@ -23668,7 +23658,7 @@ - + @@ -23708,11 +23698,11 @@ - + - + @@ -23738,11 +23728,11 @@ - + - + @@ -23755,12 +23745,12 @@ - + - + @@ -23769,7 +23759,7 @@ - + @@ -23778,7 +23768,7 @@ - + @@ -23807,7 +23797,7 @@ - + @@ -24606,7 +24596,7 @@ - + @@ -25210,7 +25200,7 @@ - + @@ -26179,7 +26169,7 @@ - + @@ -26254,7 +26244,7 @@ - + @@ -26323,16 +26313,16 @@ - + - + - + - + @@ -26382,7 +26372,7 @@ - + @@ -27001,7 +26991,7 @@ - + @@ -27834,7 +27824,7 @@ - + @@ -28778,7 +28768,7 @@ - + @@ -28975,7 +28965,7 @@ - + @@ -29294,7 +29284,7 @@ - + @@ -29308,7 +29298,7 @@ - + @@ -29550,7 +29540,7 @@ - + @@ -29606,16 +29596,16 @@ - - + + - + - + @@ -30084,7 +30074,7 @@ - + @@ -30095,7 +30085,7 @@ - + @@ -30105,7 +30095,7 @@ - + @@ -30128,7 +30118,7 @@ - + @@ -30234,7 +30224,7 @@ - + @@ -30265,14 +30255,14 @@ - + - + @@ -31313,7 +31303,7 @@ - + @@ -31442,8 +31432,8 @@ - - + + @@ -31469,7 +31459,7 @@ - + @@ -31628,19 +31618,19 @@ - + - + - + @@ -31851,7 +31841,7 @@ - + @@ -31863,7 +31853,7 @@ - + @@ -32023,7 +32013,7 @@ - + @@ -32061,14 +32051,14 @@ - + - + @@ -32088,21 +32078,21 @@ - + - + - + - + @@ -32148,13 +32138,13 @@ - + - + - + @@ -32168,7 +32158,7 @@ - + @@ -32182,7 +32172,7 @@ - + @@ -32349,13 +32339,13 @@ - + - + @@ -32878,7 +32868,7 @@ - + @@ -32900,7 +32890,7 @@ - + @@ -33032,7 +33022,7 @@ - + @@ -33041,7 +33031,7 @@ - + @@ -33376,7 +33366,7 @@ - + @@ -33426,7 +33416,7 @@ - + @@ -33448,10 +33438,10 @@ - + - + @@ -33465,10 +33455,10 @@ - + - + @@ -33491,16 +33481,16 @@ - + - + - + @@ -33733,7 +33723,7 @@ - + @@ -33945,7 +33935,7 @@ - + @@ -34027,11 +34017,11 @@ - - + + - + @@ -34050,7 +34040,7 @@ - + @@ -34061,14 +34051,14 @@ - + - + @@ -34088,7 +34078,7 @@ - + @@ -34115,10 +34105,10 @@ - + - + @@ -34307,7 +34297,7 @@ - + @@ -34538,7 +34528,7 @@ - + @@ -34599,7 +34589,7 @@ - + @@ -35018,7 +35008,7 @@ - + @@ -35173,19 +35163,19 @@ - + - + - + @@ -35226,7 +35216,7 @@ - + @@ -35238,7 +35228,7 @@ - + @@ -35272,7 +35262,7 @@ - + @@ -35284,7 +35274,7 @@ - + @@ -35295,10 +35285,10 @@ - + - + @@ -35344,11 +35334,11 @@ - + - + @@ -35379,7 +35369,7 @@ - + @@ -35558,12 +35548,12 @@ - + - + @@ -35596,7 +35586,7 @@ - + @@ -36423,10 +36413,10 @@ - + - - + + @@ -36451,26 +36441,26 @@ - + - + - + - + @@ -36549,7 +36539,7 @@ - + @@ -36606,7 +36596,7 @@ - + @@ -36620,14 +36610,14 @@ - + - + @@ -36677,7 +36667,7 @@ - + @@ -36686,7 +36676,7 @@ - + @@ -36754,7 +36744,7 @@ - + @@ -36781,7 +36771,7 @@ - + @@ -36807,7 +36797,7 @@ - + @@ -36960,7 +36950,7 @@ - + @@ -37005,7 +36995,7 @@ - + @@ -37016,7 +37006,7 @@ - + @@ -37244,17 +37234,17 @@ - + - + - + @@ -37293,7 +37283,7 @@ - + @@ -37301,7 +37291,7 @@ - + @@ -37309,7 +37299,7 @@ - + @@ -37324,7 +37314,7 @@ - + @@ -37334,7 +37324,7 @@ - + @@ -37407,47 +37397,47 @@ - + - + - + - + - + - + - + - + @@ -37500,17 +37490,17 @@ - + - + - + @@ -37542,7 +37532,7 @@ - + @@ -37767,7 +37757,7 @@ - + @@ -37776,7 +37766,7 @@ - + @@ -37851,7 +37841,7 @@ - + @@ -38493,7 +38483,7 @@ - + @@ -38718,7 +38708,7 @@ - + @@ -38843,7 +38833,7 @@ - + @@ -39894,7 +39884,7 @@ - + @@ -42420,11 +42410,11 @@ - + - + @@ -42509,7 +42499,7 @@ - + @@ -43235,7 +43225,7 @@ - + @@ -43295,13 +43285,13 @@ - + - + @@ -43334,7 +43324,7 @@ - + @@ -43426,7 +43416,7 @@ - + @@ -43675,7 +43665,7 @@ - + @@ -43687,7 +43677,7 @@ - + @@ -43750,7 +43740,7 @@ - + @@ -43801,7 +43791,7 @@ - + @@ -44021,7 +44011,7 @@ - + @@ -44092,7 +44082,7 @@ - + @@ -44174,7 +44164,7 @@ - + @@ -44342,10 +44332,10 @@ - + - + @@ -44401,13 +44391,13 @@ - + - + - + @@ -44440,13 +44430,13 @@ - + - + @@ -44484,7 +44474,7 @@ - + @@ -44513,21 +44503,21 @@ - + - + - + - + @@ -44551,11 +44541,11 @@ - + - + @@ -44581,7 +44571,7 @@ - + @@ -44876,8 +44866,11 @@ + + + - + @@ -46583,17 +46576,17 @@ - + - + - + @@ -46687,242 +46680,249 @@ + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -46949,119 +46949,124 @@ - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - - - - - + - - + + - + - + - - + + - + + - + - - + + + + + + + + + + + - - - - - - - - - - - - + - + - - + - + + + + + + + + + + + + + @@ -47071,21 +47076,21 @@ - + - + - + - + - + @@ -47096,24 +47101,24 @@ - + - + - + - + - + @@ -47121,15 +47126,14 @@ - + - - - - + + + @@ -47137,19 +47141,20 @@ - - - + + + + - + - + @@ -47158,15 +47163,15 @@ - + - + - + @@ -47182,97 +47187,97 @@ - + - + - + - - - - - - - - - - - + + + - - - - - + + + + + - - - - + + + + + - - - + + + + - - + + + - - + - + + + + + + + - - - - - - - + + + - - + - - + + - + + + - + + + + - + @@ -47325,7 +47330,7 @@ - + @@ -47339,31 +47344,31 @@ - - + + - - + + - - + + - + - + - - + + @@ -47371,46 +47376,46 @@ - + - + - + - + - - + + - - + + - + - + - + - + @@ -47452,13 +47457,13 @@ - + - + @@ -47500,10 +47505,10 @@ - + - + @@ -47512,7 +47517,7 @@ - + @@ -47530,24 +47535,24 @@ - + - + - + - + - + @@ -47556,10 +47561,10 @@ - + - + @@ -47568,7 +47573,7 @@ - + @@ -47576,19 +47581,19 @@ - + - + - + - + @@ -47597,13 +47602,13 @@ - + - + @@ -47612,25 +47617,25 @@ - + - + - + - + - + @@ -47642,7 +47647,7 @@ - + @@ -47651,106 +47656,106 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -47759,7 +47764,7 @@ - + @@ -47767,7 +47772,7 @@ - + @@ -47776,20 +47781,20 @@ - + - + - + - + @@ -47798,8 +47803,8 @@ - - + + @@ -47827,200 +47832,200 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - + - - + + - - + + - + - - - - - - - - - - - - - - + - + + + - - - + + + + - - + - - + + + - - - + + - - + + - - + + + - - + + - - - + + - + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - + - - + - + + + + + + + + + + + + - - + + - - + + - + - - + + - + - + @@ -48034,51 +48039,47 @@ - + - + - + - - - - - - - - - - - - - - - + + + + + + + + + + + - + + + + + - + - - - - - - + + @@ -48088,119 +48089,123 @@ + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -48233,7 +48238,7 @@ - + @@ -48242,16 +48247,16 @@ - + - + - + - + @@ -48263,12 +48268,12 @@ - + - + - + @@ -48278,10 +48283,10 @@ - + - + @@ -48290,16 +48295,16 @@ - + - + - + @@ -48314,19 +48319,19 @@ - + - + - + - + - + @@ -48347,7 +48352,7 @@ - + @@ -48437,7 +48442,7 @@ - + @@ -48494,7 +48499,7 @@ - + @@ -48503,34 +48508,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -48560,32 +48565,32 @@ - + - + - + - + - + - + - + @@ -48596,32 +48601,32 @@ - + - + - + - + - + - + @@ -48634,7 +48639,7 @@ - + @@ -48647,13 +48652,13 @@ - + - + @@ -48671,22 +48676,22 @@ - + - + - + - + @@ -48698,11 +48703,11 @@ - + - - + + @@ -48710,8 +48715,8 @@ - - + + @@ -48719,7 +48724,7 @@ - + @@ -48727,32 +48732,32 @@ - + - + - + - + - + - + - + - + - + - + @@ -48770,7 +48775,7 @@ - + @@ -48803,13 +48808,13 @@ - + - + - + @@ -48818,13 +48823,13 @@ - + - + - + @@ -48838,31 +48843,31 @@ - + - + - + - + - + - + - + @@ -48889,7 +48894,7 @@ - + @@ -48907,24 +48912,24 @@ - + - + - + - + - + - + @@ -48933,10 +48938,10 @@ - + - + @@ -48944,32 +48949,32 @@ - + - + - + - + - + - + - + @@ -48987,13 +48992,13 @@ - + - + @@ -49031,9 +49036,9 @@ - + - + @@ -49045,24 +49050,24 @@ - + - + - + - + - + - + @@ -49091,21 +49096,21 @@ - + - + - + - + - + @@ -49144,7 +49149,7 @@ - + @@ -49168,16 +49173,16 @@ - + - + - + - + @@ -49195,21 +49200,21 @@ - + - + - + - + - + - + @@ -49242,12 +49247,12 @@ - + - + - + @@ -49262,15 +49267,15 @@ - + - + - + - + @@ -49291,18 +49296,18 @@ - + - + - + - + - + @@ -49314,19 +49319,19 @@ - + - + - + - + @@ -49359,24 +49364,24 @@ - + - + - + - + - + - + - + @@ -49388,13 +49393,13 @@ - + - + @@ -49402,15 +49407,15 @@ - + - + - + @@ -49424,7 +49429,7 @@ - + @@ -49445,23 +49450,23 @@ - + - + - + - + - + - + @@ -49470,23 +49475,23 @@ - + - + - + - + - + - + - + @@ -49504,10 +49509,10 @@ - + - + @@ -49516,16 +49521,16 @@ - + - + - + - + @@ -49539,10 +49544,10 @@ - + - + @@ -49551,9 +49556,9 @@ - + - + @@ -49577,7 +49582,7 @@ - + @@ -49589,15 +49594,15 @@ - + - + - + - + @@ -49606,13 +49611,13 @@ - + - + - + @@ -49636,7 +49641,7 @@ - + @@ -49651,14 +49656,14 @@ - + - + - + - + @@ -49679,10 +49684,10 @@ - + - + @@ -49691,15 +49696,15 @@ - + - + - + @@ -49708,7 +49713,7 @@ - + @@ -49719,7 +49724,7 @@ - + @@ -49752,7 +49757,7 @@ - + @@ -49764,47 +49769,47 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -49813,13 +49818,13 @@ - + - + @@ -49827,7 +49832,7 @@ - + @@ -49838,12 +49843,12 @@ - + - + - + @@ -49855,42 +49860,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -49925,10 +49930,10 @@ - + - + @@ -49940,19 +49945,19 @@ - + - + - + - + - + @@ -49981,7 +49986,7 @@ - + @@ -50008,7 +50013,7 @@ - + @@ -50043,7 +50048,7 @@ - + @@ -50055,13 +50060,13 @@ - + - + - + @@ -50070,7 +50075,7 @@ - + @@ -50079,16 +50084,16 @@ - + - + - + - + @@ -50103,26 +50108,26 @@ - + - + - + - + - + - + - + - + @@ -50143,7 +50148,7 @@ - + @@ -50151,7 +50156,7 @@ - + @@ -50165,7 +50170,7 @@ - + @@ -50173,18 +50178,18 @@ - + - + - + - + @@ -50198,29 +50203,29 @@ - + - + - + - + - + - + - + @@ -50232,10 +50237,10 @@ - + - + @@ -50253,30 +50258,30 @@ - + - + - + - + - + - + - + - + @@ -50284,7 +50289,7 @@ - + @@ -50301,7 +50306,7 @@ - + @@ -50309,55 +50314,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50366,19 +50371,19 @@ - - + + - + - + @@ -50396,7 +50401,7 @@ - + @@ -50405,7 +50410,7 @@ - + @@ -50419,16 +50424,16 @@ - + - + - + @@ -50446,24 +50451,24 @@ - + - + - + - + - + @@ -50472,10 +50477,10 @@ - + - + @@ -50490,13 +50495,13 @@ - + - + - + @@ -50505,28 +50510,28 @@ - + - + - + - + - + - + @@ -50541,12 +50546,12 @@ - + - + - + @@ -50558,99 +50563,99 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50673,7 +50678,7 @@ - + @@ -50681,7 +50686,7 @@ - + @@ -50699,10 +50704,10 @@ - + - + @@ -50728,7 +50733,7 @@ - + @@ -50736,7 +50741,7 @@ - + @@ -50745,7 +50750,7 @@ - + @@ -50771,15 +50776,15 @@ - + - + - + - + @@ -50787,7 +50792,7 @@ - + @@ -50801,42 +50806,42 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -50859,37 +50864,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -50898,13 +50903,13 @@ - + - + @@ -50942,13 +50947,13 @@ - + - + - + @@ -50969,20 +50974,20 @@ - + - + - + - - + + @@ -50990,7 +50995,7 @@ - + @@ -50998,26 +51003,26 @@ - + - + - + - + - + - + - + - + @@ -51046,20 +51051,20 @@ - + - + - + - + - + @@ -51068,18 +51073,18 @@ - + - + - + - + - + @@ -51088,10 +51093,10 @@ - + - + @@ -51099,7 +51104,7 @@ - + @@ -51107,7 +51112,7 @@ - + @@ -51116,34 +51121,34 @@ - + - + - + - + - + - + - + - + @@ -51152,10 +51157,10 @@ - + - + @@ -51166,7 +51171,7 @@ - + @@ -51175,7 +51180,7 @@ - + @@ -51204,16 +51209,36 @@ - - + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -51221,8 +51246,8 @@ - - + + @@ -51233,7 +51258,7 @@ - + @@ -51247,7 +51272,7 @@ - + @@ -51255,10 +51280,10 @@ - + - + @@ -51272,9 +51297,9 @@ - + - + @@ -51286,17 +51311,17 @@ - + - + - + - - + + @@ -51304,7 +51329,7 @@ - + @@ -51312,88 +51337,88 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -51416,8 +51441,8 @@ - - + + @@ -51425,13 +51450,13 @@ - + - + @@ -51439,21 +51464,21 @@ - - + + - + - + - + - + @@ -51467,8 +51492,8 @@ - - + + @@ -51482,27 +51507,27 @@ - + - + - + - + - + - + - + - + @@ -51523,10 +51548,10 @@ - + - + @@ -51538,7 +51563,7 @@ - + @@ -51549,13 +51574,13 @@ - + - + - + @@ -51563,12 +51588,12 @@ - + - + @@ -51594,7 +51619,7 @@ - + @@ -51603,241 +51628,242 @@ - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - + + + + + - - - + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -51845,53 +51871,53 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + @@ -51901,7 +51927,7 @@ - + @@ -51915,592 +51941,592 @@ - + - - + + - - - - + + + + - + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - + + - - - + + + - - + - - - - + + + + + + - - - + + + + + + + - - - - - + + + + + + + + + + + - - - - - - - - + + + + - + + + - - - - - - - - - + + + - - - - - - - - - - + + + + + - - - - - + + + + + + + + - - - + - + + + - - + + + - - + + + + + + + + + + - + - - - - - - - - + + + - - - - - - + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - - + + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - - + + + - - + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - + - + - - + + - + - + - - - + + + - - + + - - + + - + - - + + - - + + - + - + - + - + - - + + - - - + + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - + + - - - + + + - + - + - + - + + - - - - - + + + + + + - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -52510,46 +52536,46 @@ - - - - - - - - - - - - - - - - - - - + - - - + - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -52557,57 +52583,57 @@ - - - - - + + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -52615,23 +52641,23 @@ - + - + - + - + - + - + - + @@ -52641,7 +52667,7 @@ - + @@ -52649,10 +52675,10 @@ - + - + @@ -52665,9 +52691,9 @@ - - - + + + @@ -52685,123 +52711,123 @@ - + - - + + - - + + - + - + - + - + - + - + - + - - - - + + + + - + - + - - - - - - - - - + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -52828,24 +52854,24 @@ - + - + - + - + - + @@ -52893,9 +52919,9 @@ - + - + @@ -52904,13 +52930,13 @@ - + - + @@ -52939,15 +52965,15 @@ - + - + - + - + @@ -52956,7 +52982,7 @@ - + @@ -52971,7 +52997,7 @@ - + @@ -52997,7 +53023,7 @@ - + @@ -53014,7 +53040,7 @@ - + @@ -53028,7 +53054,7 @@ - + @@ -53054,14 +53080,14 @@ - + - + @@ -53102,7 +53128,7 @@ - + @@ -53110,7 +53136,7 @@ - + @@ -53118,7 +53144,7 @@ - + @@ -53129,10 +53155,10 @@ - + - + @@ -53141,46 +53167,46 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -53273,22 +53299,22 @@ - + - + - + - + - + @@ -53309,7 +53335,7 @@ - + @@ -53321,7 +53347,7 @@ - + @@ -53331,7 +53357,7 @@ - + @@ -53372,13 +53398,13 @@ - + - + @@ -53405,12 +53431,12 @@ - + - + @@ -53454,24 +53480,24 @@ - + - + - + - + - + - + - + @@ -53486,7 +53512,7 @@ - + @@ -53500,7 +53526,7 @@ - + @@ -53514,7 +53540,7 @@ - + @@ -53540,7 +53566,7 @@ - + @@ -53563,10 +53589,10 @@ - + - + @@ -53583,7 +53609,7 @@ - + @@ -53594,21 +53620,21 @@ - + - + - + - + - + @@ -53617,7 +53643,7 @@ - + @@ -53643,7 +53669,7 @@ - + @@ -53651,16 +53677,16 @@ - + - + - + @@ -53668,7 +53694,7 @@ - + @@ -53682,9 +53708,9 @@ - + - + @@ -53693,13 +53719,13 @@ - + - + @@ -53713,13 +53739,13 @@ - + - + - + @@ -53743,7 +53769,7 @@ - + @@ -53751,7 +53777,7 @@ - + @@ -53780,7 +53806,7 @@ - + @@ -53837,10 +53863,10 @@ - + - + @@ -53855,7 +53881,7 @@ - + @@ -53872,8 +53898,8 @@ - - + + @@ -53887,7 +53913,7 @@ - + @@ -53910,16 +53936,16 @@ - + - + - + @@ -53928,50 +53954,50 @@ - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - + @@ -53984,39 +54010,39 @@ - + - - + + - - - + + + - + - + - + - + @@ -54040,25 +54066,25 @@ - + - + - + - + - + @@ -54067,7 +54093,7 @@ - + @@ -54077,7 +54103,7 @@ - + @@ -54085,24 +54111,24 @@ - + - + - + - + @@ -54113,8 +54139,8 @@ - - + + @@ -54146,7 +54172,7 @@ - + @@ -54155,12 +54181,12 @@ - + - - + + @@ -54171,14 +54197,14 @@ - + - + - + @@ -54196,11 +54222,11 @@ - + - + @@ -54208,74 +54234,74 @@ - + - - - + + + - - + + - - + + - - - + + + - - + + - - + + - - + + - + - + - - + + - - + + - + - + - + @@ -54314,7 +54340,7 @@ - + @@ -54326,13 +54352,13 @@ - + - + @@ -54344,19 +54370,19 @@ - + - + - + - + - + @@ -54368,13 +54394,13 @@ - + - + - + @@ -54395,7 +54421,7 @@ - + @@ -54403,46 +54429,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -54460,28 +54486,28 @@ - - - - - - + + - - + + - - + + + + + + - + - + - + @@ -54491,7 +54517,7 @@ - + @@ -54508,98 +54534,98 @@ - - + + - - + + - + - + - + - + - + - - + + - - + + - - + + - + - + - - + + - + - + - + - + - + - + - + - + @@ -54609,7 +54635,7 @@ - + @@ -54619,7 +54645,7 @@ - + @@ -54629,7 +54655,7 @@ - + @@ -54639,7 +54665,7 @@ - + @@ -54648,57 +54674,57 @@ - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - - - + + + + @@ -54718,22 +54744,22 @@ - + - + - + - - + + - + @@ -54742,7 +54768,7 @@ - + @@ -54763,12 +54789,12 @@ - + - + - + @@ -54780,7 +54806,7 @@ - + @@ -54791,59 +54817,59 @@ - + - - + + - - - - - - - - - - - + + + + + + + + + + + - - + + - - - + + + - + - - + + - - + + - - - + + + - - - + + + @@ -54852,8 +54878,8 @@ - - + + @@ -54882,7 +54908,7 @@ - + @@ -54893,15 +54919,15 @@ - + - - - - + + + + - + @@ -54964,7 +54990,7 @@ - + @@ -54984,44 +55010,44 @@ - + - + - + - + - + - + - + - + - + @@ -55039,7 +55065,7 @@ - + @@ -55060,11 +55086,11 @@ - + - + - + @@ -55087,7 +55113,7 @@ - + @@ -55101,12 +55127,12 @@ - - + + - + @@ -55148,7 +55174,7 @@ - + @@ -55162,46 +55188,46 @@ - + - + - + - + - + - + - + - + - - - - - - + + + + + + @@ -55221,18 +55247,18 @@ - + - + - + - + @@ -55245,8 +55271,8 @@ - - + + @@ -55273,28 +55299,28 @@ - - + + - + - + - + - + - + @@ -55306,23 +55332,23 @@ - + - + - - - - + + + + @@ -55333,13 +55359,13 @@ - + - - + + @@ -55348,13 +55374,13 @@ - - + + - + @@ -55375,34 +55401,34 @@ - + - + - + - + - - - + + + - + - + @@ -55415,12 +55441,12 @@ - + - + - + @@ -55428,7 +55454,7 @@ - + @@ -55440,48 +55466,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -55502,7 +55528,7 @@ - + @@ -55579,15 +55605,15 @@ - + - + - + @@ -55643,16 +55669,16 @@ - + - + - + @@ -55667,7 +55693,7 @@ - + @@ -55679,33 +55705,33 @@ - + - + - + - + - + - + - + - + - + - + @@ -55725,24 +55751,24 @@ - + - + - + - + - + - + @@ -55754,10 +55780,10 @@ - + - + @@ -55784,7 +55810,7 @@ - + @@ -55792,66 +55818,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -55880,10 +55906,10 @@ - + - + @@ -55891,7 +55917,7 @@ - + @@ -55899,13 +55925,13 @@ - + - + @@ -55914,14 +55940,14 @@ - + - + @@ -55938,13 +55964,13 @@ - + - + @@ -55961,44 +55987,44 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -56009,75 +56035,75 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -56086,45 +56112,45 @@ - + - + - + - + - + - + - + - + - + - + @@ -56138,7 +56164,7 @@ - + @@ -56147,7 +56173,7 @@ - + @@ -56155,7 +56181,7 @@ - + @@ -56186,126 +56212,126 @@ - + - + - + - + - + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - + - - - - + - + - + + - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -56313,78 +56339,78 @@ - - + + - - - + + + - - - + + + - + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + @@ -56425,11 +56451,11 @@ - + - + @@ -56437,11 +56463,11 @@ - + - + @@ -56449,11 +56475,11 @@ - + - + @@ -56490,19 +56516,19 @@ - + - + - + - + @@ -56513,11 +56539,11 @@ - + - - + + @@ -56565,16 +56591,16 @@ - + - + - + @@ -56635,11 +56661,11 @@ - + - + @@ -56655,7 +56681,7 @@ - + @@ -56666,7 +56692,7 @@ - + @@ -56679,43 +56705,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -56738,13 +56764,13 @@ - + - + - + @@ -56777,24 +56803,24 @@ - + - - - - - - - - - - - - + + + + + + + + + + + + @@ -56810,7 +56836,7 @@ - + @@ -56818,10 +56844,10 @@ - + - + @@ -56842,7 +56868,7 @@ - + @@ -56858,51 +56884,51 @@ - - - - - - - - - - - - - - - - - - - - - + + - + + + + + + + + + + + + + + + + + + + + - + - + - - + + @@ -56932,7 +56958,7 @@ - + @@ -56946,11 +56972,11 @@ - + - - + + @@ -56979,54 +57005,54 @@ - + - + - + - - + + - + - - + + - + - - + + - - + + - + - - + + @@ -57035,30 +57061,30 @@ - + - + - + - + - - + + - + - + @@ -57066,10 +57092,10 @@ - + - + @@ -57080,33 +57106,33 @@ - + - - - + + + - + - + - + - + - + - + @@ -57117,7 +57143,7 @@ - + @@ -57126,7 +57152,7 @@ - + @@ -57137,12 +57163,12 @@ - + - + @@ -57172,36 +57198,36 @@ - + - + - + - + - + - + - + - + @@ -57210,16 +57236,16 @@ - + - + - + @@ -57230,27 +57256,27 @@ - + - + - + - + - + - + - + - + @@ -57258,16 +57284,16 @@ - + - + - + @@ -57275,15 +57301,15 @@ - + - + - + - + @@ -57291,7 +57317,7 @@ - + @@ -57302,44 +57328,44 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -57367,26 +57393,26 @@ - + - + - + - + - + - + @@ -57395,43 +57421,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -57446,7 +57472,7 @@ - + @@ -57458,33 +57484,33 @@ - + - + - + - + - + - + - + - + @@ -57496,10 +57522,10 @@ - + - + @@ -57520,10 +57546,10 @@ - + - + @@ -57538,60 +57564,60 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -57599,21 +57625,21 @@ - + - + - + - - + + @@ -57629,15 +57655,15 @@ - + - + - + - + @@ -57655,7 +57681,7 @@ - + @@ -57669,160 +57695,160 @@ - + - - + + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + + + + + - - - - + + + - + + - - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -57845,24 +57871,24 @@ - + - - - - + + - - + + + + - + - + @@ -57906,7 +57932,7 @@ - + @@ -57914,56 +57940,56 @@ - - - - - - - - - - - - - - + + - + + - - + - + + + + + + + + + + + + + - - - + + + - - + + - - + + @@ -57971,39 +57997,39 @@ - - + + - + - - + + - + - + - + - + @@ -58024,13 +58050,13 @@ - + - + @@ -58041,7 +58067,7 @@ - + @@ -58121,7 +58147,7 @@ - + @@ -58130,21 +58156,21 @@ - - - - - - - - + + + + + + + + - - + + - + @@ -58165,15 +58191,15 @@ - + - + - + @@ -58202,22 +58228,22 @@ - + - + - + - + - + @@ -58225,7 +58251,7 @@ - + @@ -58233,16 +58259,16 @@ - - - + + + - + - + @@ -58260,26 +58286,26 @@ - + - + - + - + - + @@ -58295,7 +58321,7 @@ - + @@ -58303,7 +58329,7 @@ - + @@ -58312,12 +58338,12 @@ - + - + @@ -58326,7 +58352,7 @@ - + @@ -58335,45 +58361,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -58387,32 +58413,32 @@ - + - + - + - + - + - + - + @@ -58420,21 +58446,21 @@ - + - + - + - + @@ -58442,111 +58468,111 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - + - + - + - - + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - - + + + + + + + + + + + - - + + + + + + + + + + + + + + - - - - + + + + @@ -58554,16 +58580,16 @@ - + - - + + - + @@ -58589,7 +58615,7 @@ - + @@ -58598,13 +58624,13 @@ - + - + @@ -58612,11 +58638,11 @@ - - - + + + - + @@ -58625,116 +58651,116 @@ - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - - - - + + + + @@ -58742,19 +58768,19 @@ - + - + - + - + @@ -58763,29 +58789,29 @@ - + - + - + - + - - - + + + - + @@ -58806,10 +58832,10 @@ - + - + @@ -58827,7 +58853,7 @@ - + @@ -58848,7 +58874,7 @@ - + @@ -58860,7 +58886,7 @@ - + @@ -58874,7 +58900,7 @@ - + @@ -58889,13 +58915,13 @@ - + - + @@ -58919,7 +58945,7 @@ - + @@ -59027,12 +59053,12 @@ - + - + @@ -59044,30 +59070,30 @@ - + - + - + - + - + - + @@ -59108,16 +59134,16 @@ - + - + - + - + @@ -59162,7 +59188,7 @@ - + @@ -59182,8 +59208,8 @@ - - + + @@ -59191,113 +59217,113 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -59311,12 +59337,12 @@ - + - + - + @@ -59330,7 +59356,7 @@ - + @@ -59350,177 +59376,177 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - + - - + + - - + + - - + + + - - + + + + + + + + + + + + + - - + + + - + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + @@ -59530,7 +59556,7 @@ - + @@ -59539,13 +59565,13 @@ - + - + @@ -59555,28 +59581,28 @@ - + - + - + - + - + - + @@ -59587,30 +59613,30 @@ - + - + - + - + - + - + - + - + @@ -59628,7 +59654,7 @@ - + @@ -59651,59 +59677,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -59711,26 +59737,26 @@ - + - + - + - + - + - + - + @@ -59741,38 +59767,38 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -59792,34 +59818,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -59840,220 +59866,220 @@ - + - + - + - + - + - + - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + - + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - + - + - - + - - - + - - - - + + - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - + + + + + + + + + + + + + + + + + + + + + - + + + + + - + @@ -60080,7 +60106,7 @@ - + @@ -60094,7 +60120,7 @@ - + @@ -60114,33 +60140,33 @@ - + - + - + - + - + - - + + @@ -60154,13 +60180,13 @@ - + - + @@ -60172,10 +60198,10 @@ - + - + @@ -60196,7 +60222,7 @@ - + @@ -60213,41 +60239,41 @@ - + - - - - - - - - + + + + + + + + - - + + - + - + - + @@ -60256,7 +60282,7 @@ - + @@ -60267,7 +60293,7 @@ - + @@ -60300,10 +60326,10 @@ - + - + @@ -60333,7 +60359,7 @@ - + @@ -60345,36 +60371,36 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -60403,7 +60429,7 @@ - + @@ -60411,10 +60437,10 @@ - + - + @@ -60422,29 +60448,29 @@ - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -60452,7 +60478,7 @@ - + @@ -60460,55 +60486,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -60521,7 +60547,7 @@ - + @@ -60538,19 +60564,19 @@ - - + + - + - + - + - + @@ -60571,89 +60597,89 @@ - + - + - + - + - + - + - + - + - - - - - - + + + + + + - + - + - + - + - + - - - - + + + + - - + + - - - - + + + + - + - + @@ -60746,19 +60772,19 @@ - + - + - + - + @@ -60938,13 +60964,13 @@ - + - + @@ -60956,7 +60982,7 @@ - + @@ -60965,7 +60991,7 @@ - + @@ -60997,10 +61023,10 @@ - + - + @@ -61138,7 +61164,7 @@ - + @@ -61156,7 +61182,7 @@ - + @@ -61164,7 +61190,7 @@ - + @@ -61172,79 +61198,79 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -61310,10 +61336,10 @@ - + - + @@ -61325,18 +61351,18 @@ - + - + - + - + @@ -61381,10 +61407,10 @@ - + - + @@ -61399,10 +61425,10 @@ - + - + @@ -61420,9 +61446,9 @@ - + - + @@ -61446,15 +61472,15 @@ - + - + - + @@ -61471,24 +61497,24 @@ - + - + - + - + - + - + - + @@ -61539,7 +61565,7 @@ - + @@ -61548,7 +61574,7 @@ - + @@ -61556,7 +61582,7 @@ - + @@ -61566,7 +61592,7 @@ - + @@ -61577,13 +61603,13 @@ - - + + - + @@ -61595,141 +61621,141 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - + @@ -61755,7 +61781,7 @@ - + @@ -61766,7 +61792,7 @@ - + @@ -61777,29 +61803,29 @@ - + - + - + - + - + - + - + - - + + @@ -61825,27 +61851,27 @@ - + - + - - - - - - - - + + + + + + + + - + @@ -61855,91 +61881,91 @@ - - + + - - + + - + - + - - + + - - - - - - - - - + + + - + + + + + + + - + - - + + - + - + - + - + - - + + - + - + @@ -61952,7 +61978,7 @@ - + @@ -61988,15 +62014,15 @@ - + - + - + @@ -62015,9 +62041,9 @@ - + - + @@ -62026,30 +62052,30 @@ - + - - + + - + - + - + - + @@ -62087,7 +62113,7 @@ - + @@ -62109,49 +62135,49 @@ - + - - - + + + - - + + - + - + - - + + - - + + - - + + - + - + @@ -62165,7 +62191,7 @@ - + @@ -62180,7 +62206,7 @@ - + @@ -62222,10 +62248,10 @@ - + - + @@ -62233,13 +62259,13 @@ - + - + - + @@ -62251,7 +62277,7 @@ - + @@ -62265,18 +62291,18 @@ - + - + - + - + @@ -62288,25 +62314,25 @@ - + - + - + - + - + - + @@ -62321,7 +62347,7 @@ - + @@ -62345,13 +62371,13 @@ - + - + @@ -62363,7 +62389,7 @@ - + @@ -62384,7 +62410,7 @@ - + @@ -62426,25 +62452,25 @@ - + - + - + - + @@ -62459,13 +62485,13 @@ - + - + - + @@ -62474,13 +62500,13 @@ - + - + @@ -62489,7 +62515,7 @@ - + @@ -62501,32 +62527,32 @@ - + - + - + - + - + - + - + - + - + @@ -62547,7 +62573,7 @@ - + @@ -62561,12 +62587,12 @@ - + - + - + @@ -62581,7 +62607,7 @@ - + @@ -62590,10 +62616,10 @@ - + - + @@ -62604,19 +62630,19 @@ - + - + - + @@ -62626,18 +62652,18 @@ - + - + - + - + - + @@ -62652,7 +62678,7 @@ - + @@ -62694,29 +62720,29 @@ - + - + - + - + - + - + - + - + - + @@ -62724,7 +62750,7 @@ - + @@ -62750,37 +62776,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -62794,85 +62820,77 @@ - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -62895,7 +62913,7 @@ - + @@ -62911,23 +62929,23 @@ - + - + - + - + - + - + @@ -62951,59 +62969,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -63011,7 +63029,7 @@ - + @@ -63034,7 +63052,7 @@ - + @@ -63042,59 +63060,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -63106,42 +63124,42 @@ - + - + - + - + - + - + - + - + - + - + @@ -63161,21 +63179,21 @@ - + - + - + - + - + - + @@ -63195,15 +63213,15 @@ - + - + - + @@ -63211,7 +63229,7 @@ - + @@ -63235,14 +63253,14 @@ - + - + @@ -63259,7 +63277,7 @@ - + @@ -63280,15 +63298,15 @@ - + - + - + @@ -63296,7 +63314,7 @@ - + @@ -63319,15 +63337,15 @@ - + - + - + @@ -63341,15 +63359,15 @@ - + - + - + @@ -63363,7 +63381,7 @@ - + @@ -63375,7 +63393,7 @@ - + @@ -63389,7 +63407,7 @@ - + @@ -63416,7 +63434,7 @@ - + @@ -63430,53 +63448,53 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -63497,7 +63515,7 @@ - + @@ -63505,52 +63523,52 @@ - + - + - + - + - + - - - + + + - - - + + + - - - + + + @@ -63558,141 +63576,141 @@ - + - + - + - + - + - + - + - - - + + + - - + + - - - - - - - - - - - - - - - - - + - - - - + + - - + + + - - - + + - - + + + + - - - + + - - + + + - - + + + + + + + + + - - + + + - + + + + + + + + + - - - - + + + + - - + + - - + + - - + + - + @@ -63703,7 +63721,7 @@ - + @@ -63715,33 +63733,33 @@ - + - + - + - - - - + + + + - + - - + + - - + + @@ -63754,22 +63772,22 @@ - - - + + + - + - - - - + + + + @@ -63779,12 +63797,12 @@ - + - + @@ -63799,13 +63817,13 @@ - + - + @@ -63817,7 +63835,7 @@ - + @@ -63835,22 +63853,22 @@ - + - + - + - + - + - + @@ -63865,19 +63883,19 @@ - + - + - + - + @@ -63892,26 +63910,26 @@ - + - + - + - + - + - + - + @@ -63919,7 +63937,7 @@ - + @@ -63930,7 +63948,7 @@ - + @@ -63939,7 +63957,7 @@ - + @@ -63947,25 +63965,25 @@ - + - + - + - - + + - + @@ -63976,48 +63994,48 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - - + + - - + + - + @@ -64026,16 +64044,16 @@ - - - + + + - - - + + + @@ -64043,59 +64061,59 @@ - - - - - - - - - + + + + + + + + + - - + + - - + + - + - - + + - - + + - - + + - + - + - + @@ -64112,20 +64130,20 @@ - + - + - + - - - - + + + + - + @@ -64134,19 +64152,19 @@ - + - + - + - + - + @@ -64154,9 +64172,9 @@ - + - + @@ -64165,21 +64183,21 @@ - + - + - + - + - + - + @@ -64187,7 +64205,7 @@ - + @@ -64198,7 +64216,7 @@ - + @@ -64206,27 +64224,27 @@ - + - + - + - + - + @@ -64234,12 +64252,12 @@ - + - + - + @@ -64248,9 +64266,9 @@ - + - + @@ -64259,24 +64277,24 @@ - + - + - + - + - + - + @@ -64284,130 +64302,130 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - + - - + + - - - + + + - - - + + + - - + + - - - + + + - - + + - - + + - + - + - + @@ -64415,74 +64433,74 @@ - + - + - + - + - + - + - - - - - - - - + + + + + + + + - + - + - + - + - + - + - + @@ -64491,29 +64509,29 @@ - + - + - + - + - - + + - - + + @@ -64521,8 +64539,8 @@ - - + + @@ -64530,12 +64548,12 @@ - - + + - - + + @@ -64564,19 +64582,19 @@ - - + + - + - + - + @@ -64624,30 +64642,30 @@ - + - + - + - + - + - + - + @@ -64677,57 +64695,57 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -64765,19 +64783,19 @@ - + - + - + - + @@ -64793,10 +64811,10 @@ - + - + @@ -64805,7 +64823,7 @@ - + @@ -64823,36 +64841,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -64863,7 +64881,7 @@ - + @@ -64886,42 +64904,42 @@ - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -64931,126 +64949,126 @@ - + - + - + - + - + - + - + - + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -65064,17 +65082,17 @@ - + - + - + @@ -65083,20 +65101,20 @@ - - + + - - + + - - + + @@ -65113,24 +65131,24 @@ - + - + - + - + - - - - + + + + @@ -65150,31 +65168,31 @@ - - + + - + - + - + - + - + @@ -65182,7 +65200,7 @@ - + @@ -65196,13 +65214,13 @@ - + - + - + @@ -65244,13 +65262,13 @@ - + - + - + @@ -65271,10 +65289,10 @@ - + - + @@ -65282,54 +65300,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -65349,7 +65367,7 @@ - + @@ -65364,39 +65382,39 @@ - + - + - + - + - + - + - + - + - + - + @@ -65404,7 +65422,7 @@ - + @@ -65415,7 +65433,7 @@ - + @@ -65442,9 +65460,9 @@ - + - + @@ -65456,21 +65474,21 @@ - + - + - + - + - + @@ -65481,7 +65499,7 @@ - + @@ -65492,24 +65510,24 @@ - + - + - + - + - + - + - + @@ -65520,185 +65538,185 @@ - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + - + - - + + - - - + + + - - - - - - - - - - - - - - - - - - - - + + + - + + + + - - + + - - + + - - + - - - + + - - + - - + - + - + - + + - - - - - - - - - - - - + - - - - + + + + + + + + + + + + + + + + + - - - + + - - - + + + + + + + + + + + + + + + + + + + @@ -65709,7 +65727,7 @@ - + @@ -65717,27 +65735,27 @@ - - + + - + - + - + - + @@ -65751,44 +65769,44 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -65812,7 +65830,7 @@ - + @@ -65821,7 +65839,7 @@ - + @@ -65833,97 +65851,97 @@ - - - - - - - - - - + + + + + + + + + + - + - + - - + + - + - + - + - - + + - - + + - - + + - + - + - + - - + + - - + + - + - - - - + + + + @@ -65937,46 +65955,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -65985,7 +66003,7 @@ - + @@ -65996,19 +66014,19 @@ - + - + - + - + @@ -66032,13 +66050,13 @@ - + - + - + @@ -66056,7 +66074,7 @@ - + @@ -66086,7 +66104,7 @@ - + @@ -66125,10 +66143,10 @@ - + - + @@ -66136,7 +66154,7 @@ - + @@ -66166,7 +66184,7 @@ - + @@ -66175,22 +66193,22 @@ - + - + - + - + - + @@ -66216,50 +66234,50 @@ - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + @@ -66313,9 +66331,9 @@ - + - + @@ -66327,7 +66345,7 @@ - + @@ -66339,12 +66357,12 @@ - + - + - + @@ -66365,144 +66383,144 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -66516,7 +66534,7 @@ - + @@ -66524,13 +66542,13 @@ - + - + @@ -66547,266 +66565,266 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + - + + + + + + + + + + + + - - + + - + - - + + - - + + - - + + - - - - - - - - - - - - - - - + + - - + - + + + + + + + + + + + + + + + - - + + - - + + - - - + + + - - - + + + - - + + - + - + @@ -66814,7 +66832,7 @@ - + @@ -66822,10 +66840,10 @@ - + - + @@ -66834,7 +66852,7 @@ - + @@ -66842,93 +66860,93 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + @@ -66943,156 +66961,156 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - + - - - - - - + + + + + + + - + + + + + + - - - - - - - + + + + - - - + + + + + + + + + + + + + + + + + - + - + - + - + - - + + - + - + - + - + @@ -67146,7 +67164,7 @@ - + @@ -67155,19 +67173,19 @@ - + - + - + - + - + @@ -67176,7 +67194,7 @@ - + @@ -67187,55 +67205,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67268,13 +67286,13 @@ - + - + - + @@ -67283,10 +67301,10 @@ - + - + @@ -67301,7 +67319,7 @@ - + @@ -67328,7 +67346,7 @@ - + @@ -67340,16 +67358,16 @@ - + - + - + @@ -67363,7 +67381,7 @@ - + @@ -67383,15 +67401,15 @@ - + - + - + - + @@ -67400,16 +67418,16 @@ - + - + - + @@ -67420,7 +67438,7 @@ - + @@ -67455,27 +67473,27 @@ - + - + - + - + - + - + @@ -67490,88 +67508,88 @@ - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67583,10 +67601,10 @@ - + - + @@ -67607,10 +67625,10 @@ - + - + @@ -67631,27 +67649,27 @@ - + - + - + - + - + @@ -67669,7 +67687,7 @@ - + @@ -67683,7 +67701,7 @@ - + @@ -67695,16 +67713,16 @@ - + - + - + - + @@ -67731,73 +67749,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67805,11 +67823,11 @@ - + - - + + @@ -67820,13 +67838,13 @@ - - + + - + @@ -67836,18 +67854,18 @@ - + - + - + - + @@ -67856,26 +67874,26 @@ - + - + - + - + - + - - + + @@ -67886,24 +67904,24 @@ - - - + + + - + - + - + @@ -67926,15 +67944,15 @@ - + - + - + @@ -67942,7 +67960,7 @@ - + @@ -67950,7 +67968,7 @@ - + @@ -67971,10 +67989,10 @@ - + - + @@ -67988,9 +68006,9 @@ - + - + @@ -67999,10 +68017,10 @@ - + - + @@ -68023,7 +68041,7 @@ - + @@ -68035,25 +68053,25 @@ - + - + - + - + - + @@ -68067,7 +68085,7 @@ - + @@ -68075,7 +68093,7 @@ - + @@ -68083,15 +68101,15 @@ - + - + - + - + @@ -68102,88 +68120,88 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -68191,7 +68209,7 @@ - + @@ -68214,7 +68232,7 @@ - + @@ -68224,313 +68242,313 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - + + - + + - - + - + + - - - - + - - - + + + + - - - + + + + + - - - + + + + + - + - - - + + + + + + - - + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + - - - - - - - - - - - - - - + - - + + - - + - - + - + + + + + + + + + + + + + + + + - - + + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - - - - - - - - - - - - - - - + - + - - - + - - + + - - - + + - - + + + - - - + + - + + + + + + + + + + + + + + + + + + - + - + - + - + - - - + + + - - + + - + - + @@ -68550,29 +68568,29 @@ - + - + - + - + - + - + - + @@ -68596,18 +68614,18 @@ - + - + - + @@ -68628,24 +68646,24 @@ - + - + - + - - + + @@ -68661,8 +68679,8 @@ - - + + @@ -68670,7 +68688,7 @@ - + @@ -68678,18 +68696,18 @@ - - + + - - + + - - + + @@ -68697,7 +68715,7 @@ - + @@ -68713,7 +68731,7 @@ - + @@ -68739,9 +68757,9 @@ - - - + + + @@ -68771,11 +68789,11 @@ - - + + - + @@ -68789,14 +68807,14 @@ - + - + - + @@ -68818,9 +68836,9 @@ - + - + @@ -68831,12 +68849,12 @@ - + - - + + @@ -68849,35 +68867,35 @@ - + - + - - + + - + - + - + - + @@ -68887,24 +68905,24 @@ - + - + - + - - + + - + @@ -68912,108 +68930,108 @@ - + - - + + - + - + - + - - + + - - + + - + - - + + - - + + - + - + - + - + - + - - + + - - - + + + - - + + - - + + - - + + - + - + @@ -69022,10 +69040,10 @@ - + - + @@ -69037,22 +69055,22 @@ - + - + - + - + - + - + @@ -69072,7 +69090,7 @@ - + @@ -69084,7 +69102,7 @@ - + @@ -69104,18 +69122,18 @@ - + - + - + - + @@ -69129,60 +69147,60 @@ - + - + - + - - - - - - - - - + + + + + + + + + - + - + - - + + - - + + - - + + - + - + - + @@ -69199,7 +69217,7 @@ - + @@ -69212,20 +69230,20 @@ - + - + - + - + @@ -69259,40 +69277,40 @@ - + - - - + + + - + - - + + - - + + - - + + - - - + + + @@ -69312,49 +69330,49 @@ - + - + - + - + - + - + - - + + - + - + - + @@ -69366,23 +69384,23 @@ - + - + - + - + @@ -69391,36 +69409,36 @@ - + - - + + - + - + - + - + - + - + @@ -69434,7 +69452,7 @@ - + @@ -69448,7 +69466,7 @@ - + @@ -69468,7 +69486,7 @@ - + @@ -69477,54 +69495,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -69541,7 +69559,7 @@ - + @@ -69555,7 +69573,7 @@ - + @@ -69572,7 +69590,7 @@ - + @@ -69586,7 +69604,7 @@ - + @@ -69603,7 +69621,7 @@ - + @@ -69626,7 +69644,7 @@ - + @@ -69652,7 +69670,7 @@ - + @@ -69669,7 +69687,7 @@ - + @@ -69686,7 +69704,7 @@ - + @@ -69703,7 +69721,7 @@ - + @@ -69717,7 +69735,7 @@ - + @@ -69734,7 +69752,7 @@ - + @@ -69763,7 +69781,7 @@ - + @@ -69783,25 +69801,25 @@ - - - - - + - - - - - - + - - - + + + + + + + + + + + + - + @@ -69810,7 +69828,7 @@ - + @@ -69821,12 +69839,12 @@ - + - - + + @@ -69843,16 +69861,16 @@ - - - - + + + + - + - + @@ -69864,7 +69882,7 @@ - + @@ -69879,19 +69897,19 @@ - + - + - + - + @@ -69945,31 +69963,31 @@ - + - + - + - + - + - + - + - + @@ -69987,7 +70005,7 @@ - + @@ -69998,130 +70016,130 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70136,14 +70154,14 @@ - + - + @@ -70154,28 +70172,28 @@ - + - + - + - + - + - + @@ -70187,13 +70205,13 @@ - + - + - + @@ -70211,40 +70229,40 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -70252,50 +70270,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70303,13 +70321,13 @@ - + - + @@ -70335,13 +70353,13 @@ - + - + @@ -70352,92 +70370,92 @@ - + - + - - - - - - - - + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - + + + + + - + - + - + - + @@ -70450,54 +70468,54 @@ - - + + - + - + - - - + + + - + - - - - - - - - - - - - - - - - - + - - + + - + + + + + + + + + + + + + + + + + @@ -70505,247 +70523,247 @@ - - - - - - - - - - - - - - - - - - - + + - - - + + + - - - + + + - + - - + - - - + - + - - - - + - + - - + - + + + + + - - + + + + + + - - + + + + - - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + + - - - + + - - + + - - + + + - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + - - + + - + + + + + + + + + + + + + + + + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - + - + - - - + + + - + - + - - + + - + - + - + - + - + - + @@ -70760,25 +70778,25 @@ - + - + - + - + - + @@ -70787,16 +70805,16 @@ - + - + - + @@ -70808,7 +70826,7 @@ - + @@ -70820,9 +70838,9 @@ - + - + @@ -70843,10 +70861,10 @@ - + - + @@ -70858,7 +70876,7 @@ - + @@ -70870,12 +70888,12 @@ - + - + @@ -70884,18 +70902,18 @@ - + - + - + - + @@ -70910,7 +70928,7 @@ - + @@ -70918,68 +70936,68 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -71000,18 +71018,18 @@ - + - + - + - + @@ -71031,8 +71049,8 @@ - - + + @@ -71040,7 +71058,7 @@ - + @@ -71054,9 +71072,9 @@ - + - + @@ -71068,13 +71086,13 @@ - + - + - + @@ -71083,19 +71101,19 @@ - + - + - + - + @@ -71104,16 +71122,16 @@ - + - + - + @@ -71143,37 +71161,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -71188,13 +71206,13 @@ - + - + - + @@ -71212,52 +71230,52 @@ - + - + - + - - - - - + + + + + - + - + - + - - + + - + - + - + @@ -71298,12 +71316,12 @@ - + - + - + @@ -71312,10 +71330,10 @@ - + - + @@ -71326,14 +71344,14 @@ - + - - + + @@ -71347,70 +71365,70 @@ - + - + - + - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + @@ -71418,104 +71436,104 @@ - + - - - - - - - - - - - - - - - - - - + + - + + + + + + + + + + + + + + + + + - - - + + + - - + + + + - - - + - - + + - - + + - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - + + - - + + - + - + - + @@ -71529,13 +71547,13 @@ - + - + @@ -71547,7 +71565,7 @@ - + @@ -71577,7 +71595,7 @@ - + @@ -71586,7 +71604,7 @@ - + @@ -71619,7 +71637,7 @@ - + @@ -71634,63 +71652,63 @@ - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + @@ -71707,14 +71725,14 @@ - - + + - + - - + + @@ -71724,80 +71742,80 @@ - + - - + + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - - + + - - - + + + - + - + @@ -71808,41 +71826,41 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -71851,7 +71869,7 @@ - + @@ -71865,64 +71883,64 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -71933,15 +71951,15 @@ - + - + - + - + @@ -71950,86 +71968,86 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72038,21 +72056,21 @@ - + - + - + - + @@ -72060,7 +72078,7 @@ - + @@ -72068,21 +72086,21 @@ - + - + - + - + - + @@ -72097,7 +72115,7 @@ - + @@ -72121,10 +72139,10 @@ - + - + @@ -72141,27 +72159,27 @@ - + - + - + - + - + - + - + @@ -72170,7 +72188,7 @@ - + @@ -72179,7 +72197,7 @@ - + @@ -72203,30 +72221,30 @@ - + - + - + - + - + - + - + @@ -72247,7 +72265,7 @@ - + @@ -72301,45 +72319,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72353,33 +72371,33 @@ - + - + - + - + - + - + - + - + - + @@ -72394,7 +72412,7 @@ - + @@ -72402,13 +72420,13 @@ - + - + @@ -72435,48 +72453,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72511,7 +72529,7 @@ - + @@ -72529,7 +72547,7 @@ - + @@ -72549,50 +72567,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72606,439 +72624,439 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - - + + - - - + + + - - - - - + + + + + - + - - - + + + - + - - + + - + - - + + - - - - - - - - - - - - - - + - - + - - + + - + - - + + - - + + - - + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - + + - - + + - - + + - - - - - - - - - - - + + + + - - - - + + + - - - - + + - - - - - - - + + + - + + - + - - + + - + - - + - + + - + - + + - - + - - + + + + + + + + + + + + + + + - - - + + + - + - + - + - + - + - + - + - + - + - + - - + + - - + + @@ -73046,11 +73064,11 @@ - + - + @@ -73097,7 +73115,7 @@ - + @@ -73108,97 +73126,97 @@ - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - - - + + + - + - + - + - + @@ -73212,89 +73230,89 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + @@ -73306,46 +73324,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -73365,30 +73383,30 @@ - + - + - + - + - + - + - + - + - + @@ -73396,16 +73414,16 @@ - + - + - + @@ -73416,7 +73434,7 @@ - + @@ -73427,94 +73445,94 @@ - + - + - + - + - - - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + - - + + - + - + - + - - - + + + - - - + + + - + - - + + - - + + - - + + - - + + @@ -73530,78 +73548,78 @@ - - + + - + - - - + + + - + - - - - - - - + + - - - - - - - - - - - + + - - - - + + - + - - - + - + + + - - + + - - + + + + + + + + + + + + + + + + + + @@ -73611,30 +73629,30 @@ - - - + + + - + - - + + - + - + - + @@ -73642,7 +73660,7 @@ - + @@ -73650,17 +73668,17 @@ - + - + - + - + @@ -73669,7 +73687,7 @@ - + @@ -73681,13 +73699,13 @@ - + - + @@ -73701,43 +73719,43 @@ - + - + - + - + - + - + - + - + - + @@ -73757,34 +73775,34 @@ - + - + - + - + - + - + - + - + @@ -73796,7 +73814,7 @@ - + @@ -73814,13 +73832,13 @@ - + - + @@ -73846,16 +73864,16 @@ - + - + - + - + @@ -73909,7 +73927,7 @@ - + @@ -73920,7 +73938,7 @@ - + @@ -73964,27 +73982,27 @@ - + - + - + - + - + - + - + @@ -74050,7 +74068,7 @@ - + @@ -74076,7 +74094,7 @@ - + @@ -74120,7 +74138,7 @@ - + @@ -74149,13 +74167,13 @@ - + - + - + @@ -74175,78 +74193,78 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -74266,7 +74284,7 @@ - + @@ -74286,7 +74304,7 @@ - + @@ -74312,10 +74330,10 @@ - + - + @@ -74329,13 +74347,13 @@ - + - + - + @@ -74343,7 +74361,7 @@ - + @@ -74357,15 +74375,15 @@ - + - + - + @@ -74374,103 +74392,103 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - + + - + + + + + + + + + + + + + + - + - + - - + + - + - + @@ -74479,53 +74497,53 @@ - + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + @@ -74535,13 +74553,13 @@ - + - + - + @@ -74550,40 +74568,40 @@ - + - + - + - + - + - + - + - + - + @@ -74601,7 +74619,7 @@ - + @@ -74609,7 +74627,7 @@ - + @@ -74620,14 +74638,14 @@ - + - + @@ -74643,7 +74661,7 @@ - + @@ -74656,7 +74674,7 @@ - + @@ -74667,35 +74685,35 @@ - + - + - + - + - + - + @@ -74707,16 +74725,16 @@ - + - + - + - + @@ -74728,7 +74746,7 @@ - + @@ -74747,14 +74765,14 @@ - + - + @@ -74765,7 +74783,7 @@ - + @@ -74778,29 +74796,29 @@ - + - + - + - + - + - + - + - + - + @@ -74809,9 +74827,9 @@ - + - + @@ -74826,10 +74844,10 @@ - + - + @@ -74846,17 +74864,17 @@ - + - + - + - + - + @@ -74868,9 +74886,9 @@ - + - + @@ -74885,13 +74903,13 @@ - + - + @@ -74903,9 +74921,9 @@ - + - + @@ -74914,16 +74932,16 @@ - + - + - + - + @@ -74938,18 +74956,18 @@ - + - + - + @@ -74957,7 +74975,7 @@ - + @@ -74965,9 +74983,9 @@ - - - + + + @@ -74979,29 +74997,29 @@ - + - + - + - + - + @@ -75037,13 +75055,13 @@ - - - - - + + + + + - + @@ -75052,11 +75070,11 @@ - + - + @@ -75077,15 +75095,15 @@ - - + + - + @@ -75178,7 +75196,7 @@ - + @@ -75211,15 +75229,15 @@ - + - - - + + + @@ -75230,13 +75248,13 @@ - + - + - + @@ -75269,7 +75287,7 @@ - + @@ -75278,7 +75296,7 @@ - + @@ -75289,97 +75307,97 @@ - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - + @@ -75417,16 +75435,16 @@ - + - - + + - + @@ -75452,9 +75470,9 @@ - + - + @@ -75472,7 +75490,7 @@ - + @@ -75481,7 +75499,7 @@ - + @@ -75505,10 +75523,10 @@ - + - + @@ -75517,18 +75535,18 @@ - + - + - + - + - + @@ -75537,15 +75555,15 @@ - + - + - + @@ -75554,7 +75572,7 @@ - + @@ -75564,7 +75582,7 @@ - + @@ -75572,13 +75590,13 @@ - + - + @@ -75589,13 +75607,13 @@ - + - + - + @@ -75612,16 +75630,16 @@ - + - + - + @@ -75631,7 +75649,7 @@ - + @@ -75642,27 +75660,27 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -75672,15 +75690,15 @@ - + - + - + @@ -75693,7 +75711,7 @@ - + @@ -75704,12 +75722,12 @@ - + - + @@ -75717,11 +75735,11 @@ - + - + @@ -75729,7 +75747,7 @@ - + @@ -75739,26 +75757,26 @@ - - + + - + - + - + - + @@ -75770,12 +75788,12 @@ - + - + @@ -75786,7 +75804,7 @@ - + @@ -75847,28 +75865,28 @@ - - - + + + - - - + + + - - + + - + - + - - + + @@ -75888,7 +75906,7 @@ - + @@ -75914,12 +75932,12 @@ - + - + @@ -75937,7 +75955,7 @@ - + @@ -75952,27 +75970,27 @@ - - - + + + - + - + - + - - + + @@ -76011,32 +76029,31 @@ - + - + - + - - + - + - + @@ -76067,13 +76084,13 @@ - - - + + + @@ -76084,45 +76101,45 @@ - - - - - - + + + + + + - - - - - + + + + + - + - + - + - + @@ -76133,10 +76150,10 @@ - + - + @@ -76154,15 +76171,15 @@ - + - + - + @@ -76177,9 +76194,9 @@ - - - + + + @@ -76193,14 +76210,14 @@ - + - + - + @@ -76209,7 +76226,7 @@ - + @@ -76217,13 +76234,13 @@ - + - + - + @@ -76258,20 +76275,20 @@ - + - + - + - + - + @@ -76315,11 +76332,11 @@ - - + + - + @@ -76330,8 +76347,8 @@ - - + + @@ -76343,134 +76360,34 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - - - - - - - - @@ -76484,7 +76401,7 @@ - + @@ -76559,7 +76476,7 @@ - + @@ -76572,7 +76489,7 @@ - + @@ -76580,64 +76497,64 @@ - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + @@ -76649,16 +76566,16 @@ - - + + - + - + @@ -76666,10 +76583,10 @@ - + - + @@ -76677,23 +76594,23 @@ - + - + - + - + - + - + @@ -76707,7 +76624,7 @@ - + @@ -76727,25 +76644,25 @@ - - + + - - - + + + + + + - - - - - - + + + @@ -76754,7 +76671,7 @@ - + @@ -76799,7 +76716,7 @@ - + @@ -76814,18 +76731,18 @@ - + - + - + - + @@ -76835,43 +76752,43 @@ - + - + - + - + - + - + - + - + @@ -76896,14 +76813,14 @@ - - - - + + + + - + - + @@ -76916,7 +76833,7 @@ - + @@ -76927,7 +76844,7 @@ - + @@ -76938,7 +76855,7 @@ - + @@ -76946,7 +76863,7 @@ - + @@ -76976,7 +76893,7 @@ - + @@ -76995,9 +76912,9 @@ - - - + + + @@ -77007,16 +76924,16 @@ - + - + - + @@ -77028,22 +76945,22 @@ - + - + - + - - - + + + @@ -77051,7 +76968,7 @@ - + @@ -77059,16 +76976,16 @@ - + - + - + @@ -77107,7 +77024,7 @@ - + @@ -77115,16 +77032,16 @@ - + - + - + @@ -77147,7 +77064,7 @@ - + @@ -77159,7 +77076,7 @@ - + @@ -77170,33 +77087,33 @@ - + - + - + - + - + - + - + - + @@ -77219,19 +77136,19 @@ - + - + - + - + @@ -77239,13 +77156,13 @@ - - + + - + @@ -77257,7 +77174,7 @@ - + @@ -77272,7 +77189,7 @@ - + @@ -77286,13 +77203,13 @@ - + - + - + @@ -77301,32 +77218,32 @@ - + - + - + - + - + - + - + - + @@ -77343,33 +77260,33 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - - + + @@ -77379,13 +77296,13 @@ - + - + @@ -77420,31 +77337,31 @@ - + - - + + - - + + - - + + - + - + @@ -77461,14 +77378,14 @@ - + - + @@ -77523,18 +77440,18 @@ - + - + - + @@ -77546,7 +77463,7 @@ - + @@ -77557,7 +77474,7 @@ - + @@ -77572,7 +77489,7 @@ - + @@ -77583,19 +77500,19 @@ - - - + + + - - + + - + - + @@ -77616,7 +77533,7 @@ - + @@ -77654,9 +77571,9 @@ - - - + + + @@ -77668,16 +77585,16 @@ - - + + - + - + @@ -77712,21 +77629,21 @@ - + - + - + - + @@ -77785,26 +77702,26 @@ - - - - + + + + - + - + - - + + - + - - - - + + + + @@ -77815,9 +77732,9 @@ - - - + + + @@ -77853,7 +77770,7 @@ - + @@ -77872,20 +77789,20 @@ - - + + - + - + - + - + @@ -77897,7 +77814,7 @@ - + @@ -77905,27 +77822,27 @@ - + - + - + - + - + - + @@ -77940,7 +77857,7 @@ - + @@ -77950,18 +77867,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + @@ -77973,27 +77890,27 @@ - - + + - + - + - - + + - + - + @@ -78003,23 +77920,23 @@ - - + + - + - - + + - + @@ -78027,10 +77944,10 @@ - + - - + + @@ -78046,7 +77963,7 @@ - + @@ -78057,45 +77974,45 @@ - + - + - + - - - + + + - + - + - - - + + + - - + + - - - + + + - + - + - + - + @@ -78107,12 +78024,12 @@ - + - + @@ -78133,7 +78050,7 @@ - + @@ -78150,27 +78067,27 @@ - + - - + + - + - + - - + + - + - + @@ -78180,42 +78097,42 @@ - - - - - + + + + + - - + + - + - + - - + + - + - + - + - + - + - + @@ -78224,7 +78141,7 @@ - + @@ -78236,11 +78153,11 @@ - + - + @@ -78248,13 +78165,13 @@ - + - + @@ -78272,7 +78189,7 @@ - + @@ -78283,7 +78200,7 @@ - + @@ -78291,13 +78208,13 @@ - + - + @@ -78305,10 +78222,10 @@ - + - + @@ -78322,15 +78239,15 @@ - - - - - - + + + + + + - + @@ -78340,19 +78257,19 @@ - + - - + + - + - + @@ -78363,7 +78280,7 @@ - + @@ -78379,14 +78296,14 @@ - + - + @@ -78549,14 +78466,14 @@ - - + + - + - + @@ -78565,7 +78482,7 @@ - + @@ -78598,37 +78515,37 @@ - + - + - + - - + + - + - + - + @@ -78641,7 +78558,7 @@ - + @@ -78654,18 +78571,18 @@ - - + + - + - - + + @@ -78746,7 +78663,7 @@ - + @@ -78757,7 +78674,7 @@ - + @@ -78766,20 +78683,20 @@ - - - + + + - + - + - + @@ -78788,27 +78705,27 @@ - + - + - + - + - + @@ -78820,7 +78737,7 @@ - + @@ -78836,7 +78753,7 @@ - + @@ -78859,7 +78776,7 @@ - + @@ -78874,7 +78791,7 @@ - + @@ -78913,43 +78830,43 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -78957,34 +78874,34 @@ - + - + - + - + - - - - - + + + + + - - - - - - - - + + + + + + + + @@ -78992,7 +78909,7 @@ - + @@ -79004,7 +78921,7 @@ - + @@ -79013,31 +78930,31 @@ - - - - - - - - - + + + + + + + + + - - - + + + - + - + @@ -79060,7 +78977,7 @@ - + @@ -79072,7 +78989,7 @@ - + @@ -79095,7 +79012,7 @@ - + @@ -79238,7 +79155,7 @@ - + @@ -79253,13 +79170,13 @@ - + - + @@ -79274,16 +79191,16 @@ - + - + - - + + @@ -79361,15 +79278,15 @@ - + - + - + @@ -79384,51 +79301,51 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -79483,7 +79400,7 @@ - + @@ -79497,9 +79414,9 @@ - + - + @@ -79511,16 +79428,16 @@ - - + + - + - + @@ -79533,7 +79450,7 @@ - + @@ -79553,9 +79470,9 @@ - + - + @@ -79566,11 +79483,11 @@ - + - - + + @@ -79578,108 +79495,108 @@ - - + + - + - - + + - + - + - + - + - + - + - + - + - - + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + @@ -79699,49 +79616,49 @@ - - + + - + - + - + - + - + - + - + - + - + - + @@ -79752,7 +79669,7 @@ - + @@ -79760,9 +79677,9 @@ - - - + + + @@ -79785,15 +79702,15 @@ - + - - + + - + @@ -79810,7 +79727,7 @@ - + @@ -79820,7 +79737,7 @@ - + @@ -79829,7 +79746,7 @@ - + @@ -79850,17 +79767,17 @@ - + - + - + @@ -79884,8 +79801,8 @@ - - + + @@ -79904,8 +79821,8 @@ - - + + @@ -79917,14 +79834,14 @@ - + - + - + @@ -79932,7 +79849,7 @@ - + @@ -79981,7 +79898,7 @@ - + @@ -80040,7 +79957,7 @@ - + @@ -80051,7 +79968,7 @@ - + @@ -80060,22 +79977,22 @@ - + - + - + - + @@ -80093,10 +80010,10 @@ - + - + @@ -80104,7 +80021,7 @@ - + @@ -80120,10 +80037,10 @@ - + - + @@ -80157,7 +80074,7 @@ - + @@ -80170,14 +80087,14 @@ - + - + @@ -80210,7 +80127,7 @@ - + @@ -80238,12 +80155,12 @@ - + - + @@ -80275,28 +80192,28 @@ - - - - - - - + + + + + + + - + - + - + - + @@ -80306,12 +80223,12 @@ - + - + @@ -80331,7 +80248,7 @@ - + @@ -80376,233 +80293,233 @@ - + - + - - + + - + - + - + - + - - + + - + - + - - + + - - + + - + - + - + - + - + - + - - + + - - + + - + - - + + - + - + - - + + - + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - + + - + - + - + - + @@ -80610,121 +80527,121 @@ - + - + - + - + - - + + - + - - + + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - - + + - + - - + + - + @@ -80732,145 +80649,145 @@ - + - + - - + + - - + + - + - + - - + + - + - + - + - - + + - + - - + + - - + + - + - + - + - + - + - - + + - + - - + + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + @@ -80899,19 +80816,19 @@ - + - + - + @@ -80925,9 +80842,9 @@ - + - + @@ -80951,10 +80868,10 @@ - + - + @@ -80978,13 +80895,13 @@ - + - + @@ -81005,13 +80922,13 @@ - + - + - + @@ -81020,10 +80937,10 @@ - + - + @@ -81040,7 +80957,7 @@ - + @@ -81067,7 +80984,7 @@ - + @@ -81097,7 +81014,7 @@ - + @@ -81106,19 +81023,19 @@ - + - + - + - + @@ -81130,25 +81047,25 @@ - + - + - + - + - + - + @@ -81163,25 +81080,25 @@ - + - + - + - + - + @@ -81196,7 +81113,7 @@ - + @@ -81208,10 +81125,10 @@ - + - + @@ -81261,19 +81178,19 @@ - + - + - + - + @@ -81344,7 +81261,7 @@ - + @@ -81364,10 +81281,10 @@ - + - + @@ -81388,7 +81305,7 @@ - + @@ -81400,13 +81317,13 @@ - + - + @@ -81432,7 +81349,7 @@ - + @@ -81444,13 +81361,13 @@ - + - + @@ -81465,7 +81382,7 @@ - + @@ -81477,13 +81394,13 @@ - + - + @@ -81498,24 +81415,24 @@ - + - + - + - + - + @@ -81530,16 +81447,16 @@ - + - + - + - + @@ -81550,22 +81467,22 @@ - + - + - + - + - + @@ -81576,7 +81493,7 @@ - + @@ -81587,40 +81504,40 @@ - + - + - + - + - + - + - - + + - + - + - + - + @@ -81632,13 +81549,13 @@ - + - + @@ -81647,10 +81564,10 @@ - + - + @@ -81674,18 +81591,18 @@ - + - + - + - + @@ -81699,8 +81616,8 @@ - - + + @@ -81714,31 +81631,31 @@ - + - + - + - + - + - + - + - + @@ -81750,15 +81667,15 @@ - + - + - + @@ -81766,7 +81683,7 @@ - + @@ -81774,7 +81691,7 @@ - + @@ -81809,22 +81726,22 @@ - + - + - + - + @@ -81842,7 +81759,7 @@ - + @@ -81854,10 +81771,10 @@ - + - + @@ -81875,7 +81792,7 @@ - + @@ -81896,7 +81813,7 @@ - + @@ -81929,19 +81846,19 @@ - + - + - + - + @@ -81953,25 +81870,25 @@ - + - + - + - + - + @@ -81980,7 +81897,7 @@ - + @@ -82009,7 +81926,7 @@ - + @@ -82024,81 +81941,81 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -82128,9 +82045,9 @@ - + - + @@ -82142,10 +82059,10 @@ - + - + @@ -82190,7 +82107,7 @@ - + @@ -82208,7 +82125,7 @@ - + @@ -82216,7 +82133,7 @@ - + @@ -82245,7 +82162,7 @@ - + @@ -82254,10 +82171,10 @@ - + - + @@ -82305,10 +82222,10 @@ - + - + @@ -82332,7 +82249,7 @@ - + @@ -82371,7 +82288,7 @@ - + @@ -82401,18 +82318,18 @@ - + - + - + - + @@ -82420,7 +82337,7 @@ - + @@ -82437,12 +82354,12 @@ - + - + - + @@ -82472,15 +82389,15 @@ - + - + - + - + @@ -82519,10 +82436,10 @@ - + - + @@ -82537,34 +82454,34 @@ - + - + - + - + - + - + - + - + @@ -82582,22 +82499,22 @@ - + - + - + - + - + @@ -82608,7 +82525,7 @@ - + @@ -82619,7 +82536,7 @@ - + @@ -82637,36 +82554,36 @@ - + - + - + - + - + - + - + - - + + - + - + @@ -82677,15 +82594,15 @@ - + - + - + @@ -82697,19 +82614,19 @@ - + - + - + - + @@ -82718,7 +82635,7 @@ - + @@ -82727,7 +82644,7 @@ - + @@ -82736,27 +82653,27 @@ - + - + - + - + - + @@ -82773,44 +82690,44 @@ - + - + - + - + - - + + - + - + - + - + - + - + @@ -82819,7 +82736,7 @@ - + @@ -82833,60 +82750,60 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -82913,7 +82830,7 @@ - + @@ -82922,16 +82839,16 @@ - + - + - + @@ -82948,13 +82865,13 @@ - + - + @@ -82963,10 +82880,10 @@ - + - + @@ -82981,10 +82898,10 @@ - + - + @@ -82993,8 +82910,8 @@ - - + + @@ -83005,10 +82922,10 @@ - - + + - + @@ -83017,7 +82934,7 @@ - + @@ -83029,7 +82946,7 @@ - + @@ -83047,15 +82964,15 @@ - + - + - + @@ -83063,12 +82980,12 @@ - + - + @@ -83108,7 +83025,7 @@ - + @@ -83251,7 +83168,7 @@ - + @@ -83266,7 +83183,7 @@ - + @@ -83298,7 +83215,7 @@ - + @@ -83334,24 +83251,24 @@ - + - + - + - + - + - + @@ -83381,35 +83298,35 @@ - + - + - + - + - + - + - + - + - + @@ -83420,67 +83337,67 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -83492,7 +83409,7 @@ - + @@ -83506,13 +83423,13 @@ - + - + - + @@ -83521,8 +83438,8 @@ - - + + @@ -83530,34 +83447,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -83575,9 +83492,9 @@ - + - + @@ -83598,17 +83515,17 @@ - + - + - + - + - + @@ -83620,9 +83537,9 @@ - + - + @@ -83634,7 +83551,7 @@ - + @@ -83663,10 +83580,10 @@ - + - + @@ -83690,16 +83607,16 @@ - + - + - + - + @@ -83710,7 +83627,7 @@ - + @@ -83721,10 +83638,10 @@ - + - + @@ -83743,18 +83660,18 @@ - + - + - + - + @@ -83762,7 +83679,7 @@ - + @@ -83773,20 +83690,20 @@ - + - + - + - + - + @@ -83795,7 +83712,7 @@ - + @@ -83806,15 +83723,15 @@ - + - + - + - + @@ -83859,28 +83776,28 @@ - + - + - + - + - + - + - + - + @@ -83922,10 +83839,10 @@ - + - + @@ -83934,9 +83851,9 @@ - + - + @@ -83945,7 +83862,7 @@ - + @@ -83954,7 +83871,7 @@ - + @@ -83980,7 +83897,7 @@ - + @@ -83988,7 +83905,7 @@ - + @@ -83999,28 +83916,28 @@ - + - + - + - - - + + + - + @@ -84029,13 +83946,13 @@ - + - + @@ -84058,16 +83975,16 @@ - + - + - + - + @@ -84096,22 +84013,22 @@ - + - + - + - + - + @@ -84134,7 +84051,7 @@ - + @@ -84148,7 +84065,7 @@ - + @@ -84163,19 +84080,19 @@ - + - + - - + + @@ -84183,10 +84100,10 @@ - + - + @@ -84203,15 +84120,15 @@ - + - + - + @@ -84220,27 +84137,27 @@ - + - + - + - + - + - + - + - + @@ -84278,7 +84195,7 @@ - + @@ -84299,7 +84216,7 @@ - + @@ -84308,13 +84225,13 @@ - + - + - + @@ -84326,40 +84243,40 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -84368,27 +84285,27 @@ - + - + - + - + - + - + @@ -84397,102 +84314,102 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -84500,20 +84417,20 @@ - + - + - + - + @@ -84522,36 +84439,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -84560,16 +84477,16 @@ - + - + - + @@ -84578,37 +84495,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -84629,7 +84546,7 @@ - + @@ -84815,10 +84732,10 @@ - + - + @@ -84827,7 +84744,7 @@ - + @@ -84836,10 +84753,10 @@ - + - + @@ -84872,7 +84789,7 @@ - + @@ -84887,13 +84804,13 @@ - + - + @@ -84902,10 +84819,10 @@ - + - + @@ -84919,16 +84836,16 @@ - + - + - + @@ -84937,15 +84854,15 @@ - + - + - + @@ -84957,7 +84874,7 @@ - + @@ -84966,12 +84883,12 @@ - + - + - + @@ -85007,26 +84924,26 @@ - + - + - + - + - + - + - + @@ -85047,12 +84964,12 @@ - + - + - + @@ -85064,23 +84981,23 @@ - + - + - + - + - + - + @@ -85103,29 +85020,29 @@ - + - + - + - - - - + + + + - + - + - + @@ -85134,7 +85051,7 @@ - + @@ -85152,7 +85069,7 @@ - + @@ -85163,85 +85080,85 @@ - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85262,19 +85179,19 @@ - + - + - + - + - + @@ -85295,36 +85212,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -85420,7 +85337,7 @@ - + @@ -85428,55 +85345,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85490,7 +85407,7 @@ - + @@ -85501,27 +85418,27 @@ - + - + - + - + - + - + - + @@ -85530,9 +85447,9 @@ - + - + @@ -85541,7 +85458,7 @@ - + @@ -85558,7 +85475,7 @@ - + @@ -85579,46 +85496,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85656,40 +85573,40 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -85701,43 +85618,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -85751,18 +85668,18 @@ - + - + - + - + @@ -85777,25 +85694,25 @@ - + - + - + - + - + @@ -85819,13 +85736,13 @@ - + - + - + @@ -85837,9 +85754,9 @@ - + - + @@ -85857,7 +85774,7 @@ - + @@ -85877,7 +85794,7 @@ - + @@ -85885,7 +85802,7 @@ - + @@ -85893,7 +85810,7 @@ - + @@ -85902,7 +85819,7 @@ - + @@ -85910,7 +85827,7 @@ - + @@ -85936,31 +85853,31 @@ - + - + - + - + - + - + @@ -85972,16 +85889,16 @@ - + - + - + @@ -85995,7 +85912,7 @@ - + @@ -86004,13 +85921,13 @@ - + - + - + @@ -86028,25 +85945,25 @@ - + - + - + - + - + @@ -86054,13 +85971,13 @@ - + - + - + @@ -86089,32 +86006,32 @@ - + - + - + - + - + - + - + - + @@ -86132,83 +86049,83 @@ - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -86217,13 +86134,13 @@ - + - + @@ -86274,7 +86191,7 @@ - + @@ -86286,7 +86203,7 @@ - + @@ -86301,7 +86218,7 @@ - + @@ -86322,7 +86239,7 @@ - + @@ -86349,7 +86266,7 @@ - + @@ -86364,13 +86281,13 @@ - + - + @@ -86382,13 +86299,13 @@ - + - + @@ -86405,19 +86322,19 @@ - + - + - + - + - + @@ -86428,16 +86345,16 @@ - + - + - + @@ -86461,13 +86378,13 @@ - + - + @@ -86491,7 +86408,7 @@ - + @@ -86509,16 +86426,16 @@ - - + + - + - + @@ -86529,17 +86446,17 @@ - + - + - + - + @@ -86554,15 +86471,15 @@ - + - + - + @@ -86571,7 +86488,7 @@ - + @@ -86586,101 +86503,101 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + @@ -86698,7 +86615,7 @@ - + @@ -86709,13 +86626,13 @@ - + - + - + @@ -86724,19 +86641,19 @@ - + - + - + - + @@ -86760,9 +86677,9 @@ - + - + @@ -86771,13 +86688,13 @@ - + - + @@ -86789,15 +86706,15 @@ - + - + - + @@ -86805,7 +86722,7 @@ - + @@ -86814,17 +86731,17 @@ - + - + - + - + - + @@ -86907,16 +86824,16 @@ - + - + - + @@ -86927,24 +86844,24 @@ - + - + - + - + - + - + - + @@ -87045,7 +86962,7 @@ - + @@ -87053,16 +86970,16 @@ - + - + - + @@ -87071,7 +86988,7 @@ - + @@ -87089,19 +87006,19 @@ - + - + - - - - + + + + @@ -87124,11 +87041,11 @@ - + - - + + @@ -87142,29 +87059,29 @@ - - + + - + - + - + - + - + - + @@ -87182,10 +87099,10 @@ - + - + @@ -87193,34 +87110,34 @@ - + - + - - - + + + - + - + - + - + - + - + - + @@ -87232,7 +87149,7 @@ - + @@ -87253,22 +87170,22 @@ - + - + - + - + - + @@ -87283,7 +87200,7 @@ - + @@ -87292,25 +87209,25 @@ - + - + - + - + - + - + - + @@ -87325,7 +87242,7 @@ - + @@ -87337,10 +87254,10 @@ - + - + @@ -87349,10 +87266,10 @@ - + - + @@ -87360,7 +87277,7 @@ - + @@ -87374,7 +87291,7 @@ - + @@ -87401,7 +87318,7 @@ - + @@ -87427,15 +87344,15 @@ - + - + - + - + @@ -87443,28 +87360,28 @@ - + - + - + - + - + - + - + @@ -87473,18 +87390,18 @@ - + - + - + @@ -87499,9 +87416,9 @@ - + - + @@ -87510,7 +87427,7 @@ - + @@ -87521,10 +87438,10 @@ - + - + @@ -87532,27 +87449,27 @@ - + - + - + - + - + - + - + - + @@ -87567,15 +87484,15 @@ - + - + - + - + @@ -87584,10 +87501,10 @@ - + - + @@ -87595,12 +87512,12 @@ - + - + - + @@ -87633,7 +87550,7 @@ - + @@ -87642,7 +87559,7 @@ - + @@ -87654,28 +87571,28 @@ - + - + - + - + - + - + @@ -87686,13 +87603,13 @@ - + - + - + @@ -87722,10 +87639,10 @@ - + - + @@ -87734,7 +87651,7 @@ - + @@ -87767,13 +87684,13 @@ - + - + - + @@ -87788,18 +87705,18 @@ - + - + - + - + @@ -87810,64 +87727,64 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -87875,7 +87792,7 @@ - + @@ -87884,16 +87801,16 @@ - - + + - + - + - + @@ -87904,7 +87821,7 @@ - + @@ -87921,7 +87838,7 @@ - + @@ -87946,7 +87863,7 @@ - + @@ -88078,7 +87995,7 @@ - + @@ -88086,9 +88003,9 @@ - + - + @@ -88103,7 +88020,7 @@ - + @@ -88112,7 +88029,7 @@ - + @@ -88127,23 +88044,23 @@ - + - + - + - + @@ -88153,9 +88070,9 @@ - + - + @@ -88163,7 +88080,7 @@ - + @@ -88182,10 +88099,10 @@ - + - + @@ -88211,13 +88128,13 @@ - + - + - + @@ -88231,7 +88148,7 @@ - + @@ -88239,10 +88156,10 @@ - + - + @@ -88259,7 +88176,7 @@ - + @@ -88270,7 +88187,7 @@ - + @@ -88278,16 +88195,16 @@ - - + + - + - + @@ -88299,7 +88216,7 @@ - + @@ -88308,7 +88225,7 @@ - + @@ -88320,19 +88237,19 @@ - + - + - + - + - + @@ -88341,20 +88258,20 @@ - + - + - + - + - + @@ -88363,24 +88280,24 @@ - + - + - - + + - + - + @@ -88409,15 +88326,15 @@ - + - + - + @@ -88446,7 +88363,7 @@ - + @@ -88454,7 +88371,7 @@ - + @@ -88462,29 +88379,29 @@ - + - + - + - + - + - + @@ -88498,9 +88415,9 @@ - + - + @@ -88513,13 +88430,13 @@ - - + + - + @@ -88536,17 +88453,17 @@ - + - + - + @@ -88593,7 +88510,7 @@ - + @@ -88623,7 +88540,7 @@ - + @@ -88668,10 +88585,10 @@ - + - + @@ -88692,16 +88609,16 @@ - + - + - + - + @@ -88715,7 +88632,7 @@ - + @@ -88763,7 +88680,7 @@ - + @@ -88771,14 +88688,14 @@ - + - + @@ -88789,35 +88706,35 @@ - + - + - + - + - + - + - + - + - + - + @@ -88829,20 +88746,20 @@ - + - + - + - + @@ -88852,7 +88769,7 @@ - + @@ -88861,22 +88778,22 @@ - + - + - + - + - + - + @@ -88884,18 +88801,18 @@ - + - + - + - + @@ -88903,18 +88820,18 @@ - + - + - + @@ -88924,26 +88841,26 @@ - + - + - + - + - + - + @@ -88955,66 +88872,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -89040,23 +88957,23 @@ - + - + - + - + @@ -89083,80 +89000,80 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -89164,10 +89081,10 @@ - + - + @@ -89184,7 +89101,7 @@ - + @@ -89201,13 +89118,13 @@ - + - + - + @@ -89219,16 +89136,16 @@ - + - + - + - + @@ -89243,9 +89160,9 @@ - + - + @@ -89254,7 +89171,7 @@ - + @@ -89267,635 +89184,635 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + - + - + - - - + + + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - + - - + + - + - + - + - + - + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - - + + + - - + + - + - + - + - + - + @@ -89903,7 +89820,7 @@ - + @@ -89912,17 +89829,17 @@ - + - + - + @@ -89931,202 +89848,202 @@ - - + + - + - + - + - + - - + + - + - - + + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - + - - + + - + - - + + - + - + - + - - + + - - + + - - + + - - + + - + - - + + - + @@ -90135,7 +90052,7 @@ - + @@ -90143,151 +90060,151 @@ - - - + + + - + - - + + - - + + - + - + - - - + + + - + - - + + - - + + - + - - + + - + - + - + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - + - + - + - + @@ -90295,19 +90212,19 @@ - + - + - + @@ -90315,12 +90232,12 @@ - + - + @@ -90328,192 +90245,192 @@ - + - - + + - - + + - - + + - - + + - - + + - + - - + + - + - + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - - + + - - + + - - + + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - - - + + + - + - + @@ -90521,19 +90438,19 @@ - - + + - + - + @@ -90541,7 +90458,7 @@ - + @@ -90549,7 +90466,7 @@ - + @@ -90557,14 +90474,14 @@ - + - + - + @@ -90587,7 +90504,7 @@ - + @@ -90605,8 +90522,8 @@ - - + + @@ -90617,29 +90534,29 @@ - - + + - + - + - - + + - + @@ -90650,10 +90567,10 @@ - + - + @@ -90675,7 +90592,7 @@ - + @@ -90687,8 +90604,8 @@ - - + + @@ -90699,7 +90616,7 @@ - + @@ -90712,7 +90629,7 @@ - + @@ -90720,12 +90637,12 @@ - - + + - + - + @@ -90741,17 +90658,17 @@ - + - + - + @@ -90766,8 +90683,8 @@ - - + + @@ -90783,7 +90700,7 @@ - + @@ -90806,28 +90723,28 @@ - + - + - + - + - + - + - + - + @@ -90842,18 +90759,18 @@ - + - + - + - + - + @@ -90868,7 +90785,7 @@ - + @@ -90876,28 +90793,28 @@ - + - + - + - + - + - + @@ -90908,90 +90825,82 @@ - - - - - - - - - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - + - - + + - + - - + + - + - + - - + + - + - - + + - + - + - + - + - + @@ -90999,10 +90908,10 @@ - + - + @@ -91011,12 +90920,12 @@ - + - + @@ -91024,69 +90933,69 @@ - - - - - - - + + + + + + + - + - + - + - + - - - + + + - + - + - + - - + + - + - + - + - + - + - + - - + + @@ -91125,7 +91034,7 @@ - + @@ -91151,18 +91060,18 @@ - + - + - + - + @@ -91177,9 +91086,9 @@ - + - + @@ -91191,37 +91100,37 @@ - - - - + + + + - - + + - + - - + + - + - + - + - + @@ -91239,7 +91148,7 @@ - + @@ -91254,36 +91163,36 @@ - + - + - + - + - + - + - + - + @@ -91300,7 +91209,7 @@ - + @@ -91311,42 +91220,42 @@ - - - + + + - - - - - + + + + + - + - - + + - - + + - + - + - - + + - - + + @@ -91366,7 +91275,7 @@ - + @@ -91374,7 +91283,7 @@ - + @@ -91384,7 +91293,7 @@ - + @@ -91395,7 +91304,7 @@ - + @@ -91407,7 +91316,7 @@ - + @@ -91421,7 +91330,7 @@ - + @@ -91436,7 +91345,7 @@ - + @@ -91454,7 +91363,7 @@ - + @@ -91482,13 +91391,13 @@ - - + + - - + + @@ -91496,7 +91405,7 @@ - + @@ -91507,12 +91416,12 @@ - + - - + + @@ -91533,14 +91442,14 @@ - + - + @@ -91557,7 +91466,7 @@ - + @@ -91570,27 +91479,27 @@ - - + + - + - - + + - + - + @@ -91601,9 +91510,9 @@ - + - + @@ -91612,7 +91521,7 @@ - + @@ -91621,7 +91530,7 @@ - + @@ -91639,7 +91548,7 @@ - + @@ -91648,7 +91557,7 @@ - + @@ -91656,9 +91565,9 @@ - + - + @@ -91673,7 +91582,7 @@ - + @@ -91697,7 +91606,7 @@ - + @@ -91735,10 +91644,10 @@ - + - + @@ -91750,7 +91659,7 @@ - + @@ -91765,7 +91674,7 @@ - + @@ -91776,7 +91685,7 @@ - + @@ -91784,14 +91693,14 @@ - - - - - - + + + + + + - + @@ -91857,19 +91766,19 @@ - - + + - - + + - + @@ -91890,7 +91799,7 @@ - + @@ -91993,7 +91902,7 @@ - + @@ -92002,25 +91911,25 @@ - + - + - + - + @@ -92072,32 +91981,32 @@ - + - + - + - + - + - + @@ -92105,12 +92014,12 @@ - + - + @@ -92137,7 +92046,7 @@ - + @@ -92180,29 +92089,29 @@ - + - + - + - + - + - + - + - + @@ -92210,7 +92119,7 @@ - + @@ -92232,35 +92141,35 @@ - - + + - + - + - + - + - + - - - + + + @@ -92285,19 +92194,19 @@ - + - + - + @@ -92305,14 +92214,14 @@ - + - + @@ -92398,16 +92307,16 @@ - + - + - + @@ -92419,10 +92328,10 @@ - + - + @@ -92431,7 +92340,7 @@ - + @@ -92444,7 +92353,7 @@ - + @@ -92456,7 +92365,7 @@ - + @@ -92467,17 +92376,17 @@ - + - + - + @@ -92488,18 +92397,18 @@ - + - + - + - + - + @@ -92516,19 +92425,19 @@ - + - + - + - + - + @@ -92536,36 +92445,36 @@ - - + + - - + + - - - + + + - + - + - - + + - + @@ -92591,27 +92500,27 @@ - + - + - + - + - + @@ -92622,7 +92531,7 @@ - + @@ -92658,7 +92567,7 @@ - + @@ -92672,8 +92581,8 @@ - - + + @@ -92693,7 +92602,7 @@ - + @@ -92704,11 +92613,11 @@ - - + + - + @@ -92716,15 +92625,15 @@ - + - - + + - + @@ -92746,7 +92655,7 @@ - + @@ -92775,7 +92684,7 @@ - + @@ -92790,7 +92699,7 @@ - + @@ -92809,7 +92718,7 @@ - + @@ -92855,8 +92764,8 @@ - - + + @@ -92864,30 +92773,30 @@ - + - + - - - - + + + + - + - + - + @@ -92924,15 +92833,15 @@ - + - + - + @@ -92946,7 +92855,7 @@ - + @@ -92962,24 +92871,24 @@ - + - + - + - + - + - + @@ -92991,20 +92900,20 @@ - + - + - + - + - + @@ -93016,15 +92925,15 @@ - + - + - + @@ -93032,7 +92941,7 @@ - + @@ -93052,10 +92961,10 @@ - - - - + + + + @@ -93071,7 +92980,7 @@ - + @@ -93089,7 +92998,7 @@ - + @@ -93170,7 +93079,7 @@ - + @@ -93208,8 +93117,8 @@ - - + + @@ -93222,52 +93131,44 @@ - + - - + + - - + + - - + + - + - - + + - + - - - + + + - + - - - - - - - - - + @@ -93276,15 +93177,15 @@ - + - + - + - + @@ -93295,7 +93196,21 @@ - + + + + + + + + + + + + + + + @@ -93303,22 +93218,22 @@ - + - + - + - + - + - + @@ -93326,25 +93241,25 @@ - + - + - + - + @@ -93371,10 +93286,10 @@ - + - + @@ -93437,7 +93352,7 @@ - + @@ -93476,7 +93391,7 @@ - + @@ -93503,7 +93418,7 @@ - + @@ -93512,28 +93427,28 @@ - + - + - + - + - + - - + + - + @@ -93556,37 +93471,37 @@ - + - + - + - + - + - + - + - + - + @@ -93598,10 +93513,10 @@ - + - + @@ -93613,7 +93528,7 @@ - + @@ -93802,7 +93717,7 @@ - + @@ -93928,13 +93843,13 @@ - + - + - + @@ -93961,10 +93876,10 @@ - + - + @@ -94006,7 +93921,7 @@ - + @@ -94024,7 +93939,7 @@ - + @@ -94033,13 +93948,13 @@ - + - + @@ -94069,46 +93984,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -94122,15 +94037,15 @@ - + - + - + @@ -94145,7 +94060,7 @@ - + @@ -94157,7 +94072,7 @@ - + @@ -94178,7 +94093,7 @@ - + @@ -94187,7 +94102,7 @@ - + @@ -94195,7 +94110,7 @@ - + @@ -94215,7 +94130,7 @@ - + @@ -94247,18 +94162,18 @@ - + - + - + - + @@ -94282,12 +94197,12 @@ - + - + - + @@ -94323,7 +94238,7 @@ - + @@ -94335,7 +94250,7 @@ - + @@ -94350,7 +94265,7 @@ - + @@ -94358,10 +94273,10 @@ - + - + @@ -94370,15 +94285,15 @@ - + - + - + - + @@ -94390,13 +94305,13 @@ - + - + @@ -94606,16 +94521,16 @@ - + - + - + - + @@ -94627,13 +94542,13 @@ - + - + @@ -94647,91 +94562,91 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -94739,189 +94654,189 @@ - - + + - - + + - - + + - + - - - + + + - - + + - - + + - + - + - + - + - + - + - + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - - - + + + + - + - + - + - + @@ -94934,21 +94849,21 @@ - + - + - + - + - - - - + + + + @@ -94957,73 +94872,73 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -95032,7 +94947,7 @@ - + @@ -95041,59 +94956,59 @@ - + - + - + - - - + + + - - + + - - + + - - + + - + - - - + + + - - - + + + - + - - + + @@ -95105,52 +95020,25 @@ - - + + - + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -95158,16 +95046,16 @@ - + - + - + - + @@ -95176,18 +95064,18 @@ - + - - - - + + + + - + @@ -95195,262 +95083,262 @@ - + - - + + - - - + + + - - - + + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - - + + - + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - - + + + - - + + - - + + - - - - + + + + - - - - - - + + + + + + - - - + + + - - - + + + - - + + - - - + + + - - - - + + + + - - + + - - - + + + - - + + - - - - + + + + - + - - - + + + - - - + + + - + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - + @@ -95458,7 +95346,7 @@ - + @@ -95466,7 +95354,7 @@ - + @@ -95474,48 +95362,48 @@ - + - - - + + + - - + + - - + + - + - + - + - + - + - - - + + + @@ -95531,45 +95419,45 @@ - + - + - - + + - - + + - + - + - + - + - + @@ -95584,10 +95472,10 @@ - - + + - + @@ -95596,8 +95484,8 @@ - - + + @@ -95605,25 +95493,25 @@ - + - + - + - + - + - + - + @@ -95643,22 +95531,22 @@ - - - - - - - - + + + + + + + + - + - - - + + + @@ -95667,8 +95555,8 @@ - - + + @@ -95682,69 +95570,69 @@ - + - + - - + + - + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - + - + - + - - + + - - + + - + @@ -95758,13 +95646,13 @@ - + - + @@ -95798,7 +95686,7 @@ - + @@ -95828,7 +95716,7 @@ - + @@ -95846,7 +95734,7 @@ - + @@ -95855,21 +95743,29 @@ - + - + - - - - - - - + - + + + + + + + + + + + + + + + @@ -95890,61 +95786,61 @@ - + - - + + - - + + - - + + - - + + - - + + - + - + - + - + @@ -95952,7 +95848,7 @@ - + @@ -95960,26 +95856,26 @@ - - + + - - + + - + - + @@ -96005,31 +95901,31 @@ - + - + - + - + - + - + @@ -96040,8 +95936,8 @@ - - + + @@ -96051,7 +95947,7 @@ - + @@ -96068,12 +95964,12 @@ - + - + @@ -96088,13 +95984,13 @@ - + - + - + @@ -96106,55 +96002,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -96169,16 +96065,16 @@ - + - + - + @@ -96190,30 +96086,30 @@ - + - + - + - + - + - + - + - + @@ -96222,24 +96118,24 @@ - - + + - + - + - + - + - + @@ -96272,7 +96168,7 @@ - + @@ -96280,7 +96176,7 @@ - + @@ -96297,15 +96193,15 @@ - + - + - + - + @@ -96317,7 +96213,7 @@ - + @@ -96343,7 +96239,7 @@ - + @@ -96355,10 +96251,10 @@ - + - + @@ -96384,7 +96280,7 @@ - + @@ -96398,7 +96294,7 @@ - + @@ -96409,7 +96305,7 @@ - + @@ -96423,7 +96319,7 @@ - + @@ -96434,10 +96330,10 @@ - + - + @@ -96448,7 +96344,7 @@ - + @@ -96471,24 +96367,24 @@ - + - + - + - + - + - + - + @@ -96499,7 +96395,7 @@ - + @@ -96513,9 +96409,9 @@ - + - + @@ -96527,7 +96423,7 @@ - + @@ -96541,25 +96437,25 @@ - + - + - + - + - + - + - + @@ -96570,7 +96466,7 @@ - + @@ -96581,16 +96477,16 @@ - + - + - + - + @@ -96607,114 +96503,114 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - + + + + - + - - - + + + - + - + - + - - + + - - + + - - + + - + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - + @@ -96725,31 +96621,31 @@ - + - - + + - + - + - + - - - + + + @@ -96762,8 +96658,8 @@ - - + + @@ -96774,23 +96670,23 @@ - - - + + + - + - + - + - + @@ -96799,20 +96695,20 @@ - + - + - - - + + + @@ -96823,40 +96719,40 @@ - + - + - + - + - + - + - - - + + + @@ -96864,7 +96760,7 @@ - + @@ -96872,13 +96768,13 @@ - + - + @@ -96886,45 +96782,45 @@ - + - + - + - + - + - - + + - + - + - + - + - + @@ -96990,7 +96886,7 @@ - + @@ -97005,7 +96901,7 @@ - + @@ -97020,7 +96916,7 @@ - + @@ -97043,16 +96939,16 @@ - + - + - + @@ -97060,29 +96956,29 @@ - + - + - + - + - + - + - + - + @@ -97090,7 +96986,7 @@ - + @@ -97098,7 +96994,7 @@ - + @@ -97109,7 +97005,7 @@ - + @@ -97117,7 +97013,7 @@ - + @@ -97146,24 +97042,24 @@ - + - + - + - + - + @@ -97181,13 +97077,13 @@ - + - + - + @@ -97211,34 +97107,34 @@ - + - + - + - + - + - + - + - + @@ -97255,20 +97151,20 @@ - + - + - + - + - + @@ -97277,18 +97173,18 @@ - + - + - + - + - + @@ -97306,10 +97202,10 @@ - + - + @@ -97318,13 +97214,13 @@ - + - + - + @@ -97404,7 +97300,7 @@ - + @@ -97425,13 +97321,13 @@ - + - + - + @@ -97446,7 +97342,7 @@ - + @@ -97458,10 +97354,10 @@ - + - + @@ -97476,13 +97372,13 @@ - + - + @@ -97497,13 +97393,13 @@ - + - + - + @@ -97511,7 +97407,7 @@ - + @@ -97519,10 +97415,10 @@ - + - + @@ -97536,7 +97432,7 @@ - + @@ -97550,7 +97446,7 @@ - + @@ -97558,15 +97454,15 @@ - + - + - + - + @@ -97578,319 +97474,319 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -97916,23 +97812,23 @@ - + - + - + - + - + - + - + @@ -97941,7 +97837,7 @@ - + @@ -97955,32 +97851,32 @@ - + - + - + - + - + - + - + - + - + - + @@ -97988,27 +97884,27 @@ - + - + - + - + - + - + - + - + - + @@ -98016,12 +97912,12 @@ - + - + @@ -98029,7 +97925,7 @@ - + @@ -98052,10 +97948,10 @@ - + - + @@ -98066,12 +97962,12 @@ - + - + - + @@ -98089,7 +97985,7 @@ - + @@ -98099,7 +97995,7 @@ - + @@ -98110,7 +98006,7 @@ - + @@ -98119,74 +98015,74 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -98195,38 +98091,38 @@ - + - + - + - + - + - + - + - + - + - + @@ -98250,587 +98146,587 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - + + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + - - + + + + - - - - - + + + - - + + + - - + + + + - - - + + + - - + + + - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - + + + + - - - - + + + + - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - + - - - + + + - - - + + + - - - + + + - + - - - + + + - + - - + + - + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + @@ -98839,44 +98735,44 @@ - - + + - + - + - - + + - + - + - + - + @@ -98887,108 +98783,108 @@ - + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + @@ -98997,106 +98893,106 @@ - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -99104,147 +99000,147 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -99253,9 +99149,9 @@ - + - + @@ -99264,7 +99160,7 @@ - + @@ -99279,31 +99175,31 @@ - + - + - + - + - + - + - - + + - + @@ -99312,53 +99208,53 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -99372,67 +99268,67 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -99440,9 +99336,9 @@ - + - + @@ -99451,7 +99347,7 @@ - + @@ -99459,19 +99355,19 @@ - + - + - + - + - + @@ -99486,32 +99382,32 @@ - + - + - + - + - + - + - + - + - + @@ -99525,22 +99421,22 @@ - + - + - + - + - + - + @@ -99558,7 +99454,7 @@ - + @@ -99569,7 +99465,7 @@ - + @@ -99580,13 +99476,13 @@ - + - + @@ -99597,81 +99493,81 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + + - + @@ -99689,11 +99585,11 @@ - - - + + + - + @@ -99708,42 +99604,42 @@ - + - + - + - + - - + + - + - + - + - + - + @@ -99752,40 +99648,40 @@ - + - + - - + + - + - + - + - + - + - + - - + + @@ -99796,22 +99692,22 @@ - + - + - + - + @@ -99820,7 +99716,7 @@ - + @@ -99831,7 +99727,7 @@ - + @@ -99872,7 +99768,7 @@ - + @@ -99886,36 +99782,36 @@ - + - - - - - - - + + + + + + + + + + + + + + + + - - - - + - - + - - - - - - - + + @@ -99925,11 +99821,11 @@ - + - + @@ -99944,21 +99840,21 @@ - + - + - + - + @@ -99969,77 +99865,77 @@ - - + + - - + + - - + + - + - - + + - + - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + + + @@ -100047,7 +99943,7 @@ - + @@ -100076,30 +99972,30 @@ - + - + - - + + - + - + - + - + @@ -100108,13 +100004,13 @@ - + - + - + @@ -100123,7 +100019,7 @@ - + @@ -100156,24 +100052,24 @@ - + - + - + - + - + @@ -100218,20 +100114,20 @@ - + - + - + - + - + - + @@ -100239,7 +100135,7 @@ - + @@ -100247,68 +100143,84 @@ - + - + - + - - - - - - - + + + + + + + - + - + - + - + - + - + - + - - - - + - + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + @@ -100318,8 +100230,8 @@ - - + + @@ -100347,7 +100259,7 @@ - + @@ -100358,27 +100270,27 @@ - + - + - + - + - + - + - + - + @@ -100390,15 +100302,23 @@ - - - + + + + + + + + + + + - + - - + + @@ -100407,26 +100327,26 @@ - + - + - - + + - - - + + + - + - + @@ -100434,33 +100354,33 @@ - + - + - - + + - + - + - + @@ -100469,21 +100389,21 @@ - + - + - + - + @@ -100492,7 +100412,7 @@ - + @@ -100500,19 +100420,19 @@ - + - + - + @@ -100538,24 +100458,24 @@ - - + + - + - + - + - + @@ -100564,7 +100484,7 @@ - + @@ -100572,19 +100492,19 @@ - + - + - + - - + + @@ -100592,7 +100512,7 @@ - + @@ -100603,7 +100523,7 @@ - + @@ -100617,12 +100537,12 @@ - + - + @@ -100631,7 +100551,7 @@ - + @@ -100645,63 +100565,63 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -100715,21 +100635,21 @@ - + - + - + - + - + @@ -100746,61 +100666,61 @@ - + - + - + - + - + - + - + - - + + - + - + - + - + - - - - + + + + + + + + + - - - - - - - - + + + - + @@ -100813,223 +100733,237 @@ - - - + + + - - + + - - - + + + - + - - + + - + - - + + - - + + - - + + - - + + - - - - + + + + - - - + + + - + - + - + - + - - - - + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - - + + - + + + + + + + + + + + + + + - - + + - - + + + + + + + + + - + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - - + + - + - + - + - + - + - + - + - + @@ -101056,13 +100990,13 @@ - + - + @@ -101098,13 +101032,13 @@ - + - + @@ -101128,10 +101062,10 @@ - + - + @@ -101158,7 +101092,7 @@ - + @@ -101167,13 +101101,13 @@ - + - + - + @@ -101185,10 +101119,10 @@ - + - + @@ -101197,13 +101131,13 @@ - + - + - + @@ -101242,18 +101176,18 @@ - + - + - + - + @@ -101261,9 +101195,9 @@ - + - + @@ -101287,7 +101221,7 @@ - + @@ -101295,13 +101229,13 @@ - + - + @@ -101321,12 +101255,12 @@ - + - + - + @@ -101341,7 +101275,7 @@ - + @@ -101352,7 +101286,7 @@ - + @@ -101375,19 +101309,19 @@ - + - + - + - + @@ -101401,9 +101335,9 @@ - + - + @@ -101418,7 +101352,7 @@ - + @@ -101427,7 +101361,7 @@ - + @@ -101445,10 +101379,10 @@ - + - + @@ -101459,7 +101393,7 @@ - + @@ -101470,12 +101404,12 @@ - + - + @@ -101484,7 +101418,7 @@ - + @@ -101496,7 +101430,7 @@ - + @@ -101508,16 +101442,16 @@ - + - + - + @@ -101526,13 +101460,13 @@ - + - + - + @@ -101553,38 +101487,38 @@ - + - + - + - + - + - + - + - + - + @@ -101592,15 +101526,15 @@ - + - + - + @@ -101608,18 +101542,18 @@ - + - + - + - + @@ -101640,10 +101574,10 @@ - + - + @@ -101655,13 +101589,13 @@ - + - + - + @@ -101670,7 +101604,7 @@ - + @@ -101679,13 +101613,13 @@ - + - + - + @@ -101721,7 +101655,7 @@ - + @@ -101733,7 +101667,7 @@ - + @@ -101751,18 +101685,18 @@ - + - + - + - + @@ -101779,16 +101713,16 @@ - + - + - + @@ -101796,7 +101730,7 @@ - + @@ -101822,33 +101756,33 @@ - + - + - + - + - + - + - + - + - + - + @@ -101863,13 +101797,13 @@ - + - + @@ -101878,12 +101812,12 @@ - + - + - + @@ -101916,7 +101850,7 @@ - + @@ -101925,13 +101859,13 @@ - + - + @@ -101945,15 +101879,15 @@ - + - + - + - + @@ -101962,10 +101896,10 @@ - + - + @@ -101976,15 +101910,15 @@ - + - + - + @@ -101999,7 +101933,7 @@ - + @@ -102010,12 +101944,12 @@ - + - + - + @@ -102027,15 +101961,15 @@ - + - + - + - + @@ -102044,22 +101978,22 @@ - + - + - + - + - + @@ -102073,7 +102007,7 @@ - + @@ -102087,12 +102021,12 @@ - + - + - + @@ -102104,7 +102038,7 @@ - + @@ -102112,10 +102046,10 @@ - + - + @@ -102129,37 +102063,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -102179,7 +102113,7 @@ - + @@ -102187,16 +102121,16 @@ - + - + - + - + @@ -102205,39 +102139,39 @@ - + - + - + - + - + - + @@ -102245,24 +102179,24 @@ - + - + - + - + - + - + - + @@ -102274,7 +102208,7 @@ - + @@ -102285,7 +102219,7 @@ - + @@ -102293,15 +102227,15 @@ - + - + - + - + @@ -102315,7 +102249,7 @@ - + @@ -102323,7 +102257,7 @@ - + @@ -102335,15 +102269,15 @@ - + - + - + @@ -102363,27 +102297,27 @@ - + - + - + - + - + - + @@ -102391,7 +102325,7 @@ - + @@ -102402,10 +102336,10 @@ - + - + @@ -102434,336 +102368,336 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -102771,7 +102705,7 @@ - + @@ -102780,12 +102714,12 @@ - + - + - + @@ -102800,19 +102734,19 @@ - + - + - + - + @@ -102824,22 +102758,22 @@ - + - + - + - + - + @@ -102854,10 +102788,10 @@ - + - + @@ -102910,13 +102844,13 @@ - + - + @@ -102927,7 +102861,7 @@ - + @@ -102948,7 +102882,7 @@ - + @@ -102963,7 +102897,7 @@ - + @@ -102977,7 +102911,7 @@ - + @@ -102985,48 +102919,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -103037,12 +102971,12 @@ - + - + @@ -103072,10 +103006,10 @@ - + - + @@ -103084,7 +103018,7 @@ - + @@ -103117,7 +103051,7 @@ - + @@ -103126,10 +103060,10 @@ - + - + @@ -103138,21 +103072,21 @@ - + - + - + - + @@ -103163,7 +103097,7 @@ - + @@ -103201,16 +103135,16 @@ - + - + - + - + @@ -103228,10 +103162,10 @@ - + - + @@ -103249,13 +103183,13 @@ - + - + - + @@ -103276,7 +103210,7 @@ - + @@ -103297,7 +103231,7 @@ - + @@ -103326,7 +103260,7 @@ - + @@ -103337,7 +103271,7 @@ - + @@ -103345,7 +103279,7 @@ - + @@ -103362,10 +103296,10 @@ - + - + @@ -103403,7 +103337,7 @@ - + @@ -103438,7 +103372,7 @@ - + @@ -103518,7 +103452,7 @@ - + @@ -103527,9 +103461,9 @@ - + - + @@ -103577,7 +103511,7 @@ - + @@ -103586,12 +103520,12 @@ - + - + - + @@ -103620,9 +103554,9 @@ - + - + @@ -103637,7 +103571,7 @@ - + @@ -103645,9 +103579,9 @@ - + - + @@ -103656,7 +103590,7 @@ - + @@ -103677,25 +103611,25 @@ - + - + - + - + - + - + @@ -103704,23 +103638,23 @@ - + - + - + - + - + @@ -103729,7 +103663,7 @@ - + @@ -103747,9 +103681,9 @@ - + - + @@ -103761,7 +103695,7 @@ - + @@ -103770,16 +103704,16 @@ - + - + - + - + @@ -103791,7 +103725,7 @@ - + @@ -103808,9 +103742,9 @@ - + - + @@ -103825,12 +103759,12 @@ - + - + - + @@ -103845,7 +103779,7 @@ - + @@ -103857,10 +103791,10 @@ - + - + @@ -103878,22 +103812,22 @@ - + - + - + - + - + @@ -103923,24 +103857,24 @@ - + - + - + - + - + - + @@ -103949,15 +103883,15 @@ - + - + - + - + @@ -103965,7 +103899,7 @@ - + @@ -104001,21 +103935,21 @@ - + - + - + - + - + @@ -104045,7 +103979,7 @@ - + @@ -104068,9 +104002,9 @@ - + - + @@ -104094,10 +104028,10 @@ - + - + @@ -104108,7 +104042,7 @@ - + @@ -104116,7 +104050,7 @@ - + @@ -104127,7 +104061,7 @@ - + @@ -104135,45 +104069,45 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -104182,7 +104116,7 @@ - + @@ -104194,18 +104128,18 @@ - + - + - + - + @@ -104213,7 +104147,7 @@ - + @@ -104221,7 +104155,7 @@ - + @@ -104229,12 +104163,12 @@ - + - + - + @@ -104255,7 +104189,7 @@ - + @@ -104279,16 +104213,16 @@ - + - + - + @@ -104303,7 +104237,7 @@ - + @@ -104311,7 +104245,7 @@ - + @@ -104319,7 +104253,7 @@ - + @@ -104333,15 +104267,15 @@ - + - + - + - + @@ -104353,12 +104287,12 @@ - + - + @@ -104390,7 +104324,7 @@ - + @@ -104407,35 +104341,35 @@ - + - + - + - + - + - + - + - + - + @@ -104465,16 +104399,16 @@ - + - + - + @@ -104486,484 +104420,484 @@ - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - + - + - + - + - - + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + - - - + + + - - - + + + + - - - + + + - - - + + + - - - - + + + - - - + + + - - - - + + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - - - - - - - + + + + + + + + - - - + + + - - - + + + - - - + + + + - - - + + + - - - + + + + - - - + + + + - - - + + + + - - - - + + + + - - + + + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - + + + - + - - - + + + @@ -104974,374 +104908,374 @@ - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - - - + + + - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - + - - + + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - + + - - - + + + - + @@ -105349,16 +105283,16 @@ - + - + - + @@ -105368,7 +105302,7 @@ - + @@ -105376,7 +105310,7 @@ - + @@ -105523,7 +105457,7 @@ - + @@ -105811,13 +105745,13 @@ - + - + @@ -105834,12 +105768,12 @@ - + - - - - + + + + @@ -105852,9 +105786,9 @@ - - - + + + @@ -105863,42 +105797,42 @@ - + - + - + - + - + - + - + - + - + - + @@ -105907,21 +105841,21 @@ - - + + - + - + @@ -105929,75 +105863,75 @@ - - + + - + - + - - + + - + - - - + + + - - - + + + - + - + - - + + - + - - + + - + - + - + - + @@ -106009,22 +105943,22 @@ - + - + - + - + @@ -106032,57 +105966,57 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -106093,15 +106027,15 @@ - + - + - + @@ -106109,10 +106043,10 @@ - + - + @@ -106123,10 +106057,10 @@ - + - + @@ -106134,20 +106068,20 @@ - + - + - + - + - + @@ -106156,17 +106090,17 @@ - + - + - + - + - + @@ -106175,71 +106109,71 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -106250,29 +106184,29 @@ - + - + - + - + - + - + - + @@ -106286,7 +106220,7 @@ - + @@ -106300,10 +106234,10 @@ - + - + @@ -106314,10 +106248,10 @@ - + - + @@ -106334,10 +106268,10 @@ - + - + @@ -106354,7 +106288,7 @@ - + @@ -106365,23 +106299,23 @@ - + - + - + - + - + @@ -106389,7 +106323,7 @@ - + @@ -106397,7 +106331,7 @@ - + @@ -106405,7 +106339,7 @@ - + @@ -106416,10 +106350,10 @@ - + - + @@ -106427,7 +106361,7 @@ - + @@ -106438,7 +106372,7 @@ - + @@ -106452,10 +106386,10 @@ - + - + @@ -106463,7 +106397,7 @@ - + @@ -106474,10 +106408,10 @@ - + - + @@ -106486,19 +106420,19 @@ - + - - - + + + - - + + - + @@ -106507,22 +106441,22 @@ - + - - + + - - - + + + - - - + + + @@ -106530,24 +106464,24 @@ - + - - - + + + - + - - + + - + @@ -106562,7 +106496,7 @@ - + @@ -106570,7 +106504,7 @@ - + @@ -106585,13 +106519,13 @@ - + - + - + @@ -106614,19 +106548,19 @@ - + - + - + - + @@ -106644,25 +106578,25 @@ - + - - + + - - + + - - + + - + @@ -106672,7 +106606,7 @@ - + @@ -106680,12 +106614,20 @@ - + - - - + + + + + + + + + + + @@ -106693,11 +106635,11 @@ - + - + @@ -106705,56 +106647,56 @@ - + - + - + - + - + - + - - + + - + - - + + - - + + - + - + - + @@ -106764,11 +106706,11 @@ - + - + @@ -106803,22 +106745,22 @@ - + - + - + - + - + - + @@ -106839,10 +106781,10 @@ - + - + @@ -106851,7 +106793,7 @@ - + @@ -106859,9 +106801,9 @@ - + - + @@ -106870,12 +106812,12 @@ - + - + - + @@ -106905,7 +106847,7 @@ - + @@ -106913,21 +106855,21 @@ - + - + - + - + @@ -106951,51 +106893,51 @@ - - - - + + + + - + - + - - - - + + + + - + - + - + - + - + - + @@ -107004,17 +106946,17 @@ - - + + - - + + - - + + @@ -107029,64 +106971,64 @@ - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - + - + @@ -107095,20 +107037,20 @@ - + - - - + + + - + - + @@ -107120,31 +107062,31 @@ - + - + - + - - + + - + - + - + - + - + @@ -107155,7 +107097,7 @@ - + @@ -107166,7 +107108,7 @@ - + @@ -107183,119 +107125,119 @@ - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + @@ -107319,9 +107261,9 @@ - + - + @@ -107342,124 +107284,124 @@ - + - + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + - - - + + + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - + - - + + - - - + + + - - - + + + - - + + - + - + - + @@ -107477,12 +107419,12 @@ - + - + @@ -107497,7 +107439,7 @@ - + @@ -107512,10 +107454,10 @@ - + - + @@ -107536,7 +107478,7 @@ - + @@ -107545,7 +107487,7 @@ - + @@ -107562,41 +107504,41 @@ - + - + - + - + - + - + - + - - - - - - + + + + + + - + - + @@ -107608,81 +107550,81 @@ - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + - - + + - + - + - + - - + + - + - - + + - + - - + + - + - + @@ -107697,19 +107639,19 @@ - + - + - + - + @@ -107726,36 +107668,36 @@ - - - + + + - + - + - - + + - + - - + + - + @@ -107769,45 +107711,45 @@ - - + + - - + + - + - - + + - + - + - - + + - - + + @@ -107818,26 +107760,26 @@ - + - + - + - + - + - + @@ -107849,78 +107791,78 @@ - - - - - - + + + + + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -107929,34 +107871,34 @@ - - - + + + - + - + - + - + - - + + @@ -107964,13 +107906,13 @@ - + - + @@ -107984,10 +107926,10 @@ - + - + @@ -107996,7 +107938,7 @@ - + @@ -108011,15 +107953,15 @@ - + - + - + - + @@ -108039,102 +107981,102 @@ - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + + - + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + @@ -108142,8 +108084,8 @@ - - + + @@ -108151,113 +108093,121 @@ - - + + - - - + + + - + - + - + - + - - + + - + - - + + - + - - + + - - - + + + - + - + - + - - + + - - + + - - + + - - + + - + - + - + - + - + + + + + + + + + @@ -108267,17 +108217,9 @@ - - - - - - - - - + - + @@ -108289,32 +108231,32 @@ - + - + - + - + - + - + - + @@ -108328,7 +108270,7 @@ - + @@ -108346,7 +108288,7 @@ - + @@ -108367,13 +108309,13 @@ - + - + - + @@ -108384,7 +108326,7 @@ - + @@ -108393,7 +108335,7 @@ - + @@ -108408,7 +108350,7 @@ - + @@ -108420,43 +108362,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -108471,13 +108413,13 @@ - + - + @@ -108486,31 +108428,31 @@ - + - + - + - + - + @@ -108540,13 +108482,13 @@ - + - + - + @@ -108558,12 +108500,12 @@ - + - + @@ -108571,19 +108513,19 @@ - + - + - + @@ -108592,7 +108534,7 @@ - + @@ -108601,19 +108543,19 @@ - + - + - + - + - + @@ -108670,10 +108612,10 @@ - + - + @@ -108684,7 +108626,7 @@ - + @@ -108713,48 +108655,48 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -108781,7 +108723,7 @@ - + @@ -108792,28 +108734,28 @@ - + - + - + - + - + - + @@ -108826,7 +108768,7 @@ - + @@ -108834,13 +108776,13 @@ - + - + @@ -108852,65 +108794,65 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -108922,15 +108864,15 @@ - + - + - + - + @@ -108957,23 +108899,23 @@ - + - + - + - + - + @@ -108981,7 +108923,7 @@ - + @@ -109016,35 +108958,35 @@ - + - + - + - + - + - + - + - + - + @@ -109061,7 +109003,7 @@ - + @@ -109072,7 +109014,7 @@ - + @@ -109080,15 +109022,15 @@ - + - + - + @@ -109096,7 +109038,7 @@ - + @@ -109113,7 +109055,7 @@ - + @@ -109139,7 +109081,7 @@ - + @@ -109147,10 +109089,10 @@ - + - + @@ -109182,10 +109124,10 @@ - + - + @@ -109196,7 +109138,7 @@ - + @@ -109211,10 +109153,10 @@ - + - + @@ -109232,7 +109174,7 @@ - + @@ -109244,7 +109186,7 @@ - + @@ -109255,37 +109197,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -109306,9 +109248,9 @@ - + - + @@ -109317,16 +109259,16 @@ - + - + - + @@ -109339,66 +109281,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -109406,19 +109348,19 @@ - + - + - + - + @@ -109429,7 +109371,7 @@ - + @@ -109437,18 +109379,18 @@ - + - + - + - + - + @@ -109459,7 +109401,7 @@ - + @@ -109470,15 +109412,15 @@ - + - + - + - + @@ -109490,7 +109432,7 @@ - + @@ -109499,7 +109441,7 @@ - + @@ -109550,25 +109492,25 @@ - + - + - + - + - + @@ -109586,13 +109528,13 @@ - + - + @@ -109634,7 +109576,7 @@ - + @@ -109642,10 +109584,10 @@ - + - + @@ -109675,26 +109617,26 @@ - + - + - + - + - + - + @@ -109705,21 +109647,21 @@ - + - + - + - + - + - + @@ -109727,7 +109669,7 @@ - + @@ -109735,23 +109677,23 @@ - + - + - + - + - + @@ -109769,13 +109711,13 @@ - + - + @@ -109784,18 +109726,18 @@ - + - + - + - + @@ -109810,16 +109752,16 @@ - - + + - + - + @@ -109858,7 +109800,7 @@ - + @@ -109866,19 +109808,19 @@ - + - + - + - + @@ -109893,10 +109835,10 @@ - + - + @@ -109952,16 +109894,16 @@ - + - + - + @@ -109990,7 +109932,7 @@ - + @@ -110013,190 +109955,190 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -110207,15 +110149,15 @@ - + - + - + - + @@ -110226,9 +110168,9 @@ - + - + @@ -110252,81 +110194,81 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -110359,7 +110301,7 @@ - + @@ -110368,15 +110310,15 @@ - + - + - + @@ -110385,209 +110327,209 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + - + - + - + - - + + - - + + - + - + - + - + - + - - + + - + - + - + - - + + @@ -110596,12 +110538,12 @@ - + - + @@ -110615,26 +110557,26 @@ - + - + - - + + - - + + @@ -110642,406 +110584,406 @@ - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - - + + - - - + + + - + - - + + + - - + + - - - + + + - - + + - - - + + - - + + + - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + - + + + + - - - - + + + - + - - - + - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + - + + + - + + + + - - + + - - - + + + + + - - - + + + - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + + - - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - + + + + - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + - + - + @@ -111049,7 +110991,7 @@ - + @@ -111057,7 +110999,7 @@ - + @@ -111066,8 +111008,8 @@ - - + + @@ -111093,113 +111035,112 @@ - + - - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + @@ -111208,65 +111149,65 @@ - + - + - - - - + + + + - + - + - - - + + + - - - - + + + + - - - + + + - + - + - + @@ -111280,7 +111221,7 @@ - + @@ -111306,7 +111247,7 @@ - + @@ -111315,87 +111256,87 @@ - + - + - - + + - + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + @@ -111403,59 +111344,59 @@ - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + @@ -111467,13 +111408,13 @@ - + - + - + @@ -111524,10 +111465,10 @@ - + - + @@ -111551,7 +111492,7 @@ - + @@ -111563,21 +111504,21 @@ - + - + - + - + - + @@ -111586,13 +111527,13 @@ - + - + @@ -111600,10 +111541,10 @@ - + - + @@ -111672,7 +111613,7 @@ - + @@ -111687,10 +111628,10 @@ - + - + @@ -111755,7 +111696,7 @@ - + @@ -111767,7 +111708,7 @@ - + @@ -111778,9 +111719,9 @@ - + - + @@ -111795,25 +111736,25 @@ - + - + - + - + - + - + - + @@ -111909,7 +111850,7 @@ - + @@ -111917,10 +111858,10 @@ - + - + @@ -111929,21 +111870,21 @@ - + - + - + - + @@ -111954,7 +111895,7 @@ - + @@ -111974,42 +111915,42 @@ - - - - - - - - - - - + + + + + + + + + + + - - - + + + - - + + - - + + - + - + @@ -112021,7 +111962,7 @@ - + From 0e191b02af6ecb21c1b61c421e0f8bff15122f4d Mon Sep 17 00:00:00 2001 From: Dan Murphy Date: Wed, 8 Jan 2020 14:23:11 -0600 Subject: [PATCH 085/136] UPSTREAM: power: supply: core: Update sysfs-class-power ABI document Add the "Over Current" string to /sys/class/power_supply//health description. Bug: 149071038 Test: Builds Fixes: e3e83cc601e57 ("power: supply: core: Add POWER_SUPPLY_HEALTH_OVERCURRENT constant") Signed-off-by: Dan Murphy Signed-off-by: Sebastian Reichel (cherry picked from commit 333853be564526ecd74e9cbdf3e28650a47ad85d) Signed-off-by: Sandeep Patil Change-Id: Icd423387bde55285bd18d6871bba6f37efd2e034 --- Documentation/ABI/testing/sysfs-class-power | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Documentation/ABI/testing/sysfs-class-power b/Documentation/ABI/testing/sysfs-class-power index 27edc06e2495..bf3b48f022dc 100644 --- a/Documentation/ABI/testing/sysfs-class-power +++ b/Documentation/ABI/testing/sysfs-class-power @@ -189,7 +189,8 @@ Description: Access: Read Valid values: "Unknown", "Good", "Overheat", "Dead", "Over voltage", "Unspecified failure", "Cold", - "Watchdog timer expire", "Safety timer expire" + "Watchdog timer expire", "Safety timer expire", + "Over current" What: /sys/class/power_supply//precharge_current Date: June 2017 From 9179772db7e6f8f029a0d38d08004d8fc5fd0d7d Mon Sep 17 00:00:00 2001 From: Dan Murphy Date: Thu, 16 Jan 2020 11:50:37 -0600 Subject: [PATCH 086/136] FROMLIST: power_supply: Add additional health properties to the header Add HEALTH_WARM, HEALTH_COOL and HEALTH_HOT to the health enum. Bug: 149071038 Test: Builds Link: https://lore.kernel.org/linux-pm/20200116175039.1317-3-dmurphy@ti.com/ Signed-off-by: Dan Murphy Tested-by: Guru Das Srinagesh Signed-off-by: Sandeep Patil Change-Id: I5a99577e8c8c38c2ea10a339223c177d18c93d37 --- Documentation/ABI/testing/sysfs-class-power | 2 +- drivers/power/supply/power_supply_sysfs.c | 2 +- include/linux/power_supply.h | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Documentation/ABI/testing/sysfs-class-power b/Documentation/ABI/testing/sysfs-class-power index bf3b48f022dc..9f3fd01a9373 100644 --- a/Documentation/ABI/testing/sysfs-class-power +++ b/Documentation/ABI/testing/sysfs-class-power @@ -190,7 +190,7 @@ Description: Valid values: "Unknown", "Good", "Overheat", "Dead", "Over voltage", "Unspecified failure", "Cold", "Watchdog timer expire", "Safety timer expire", - "Over current" + "Over current", "Warm", "Cool", "Hot" What: /sys/class/power_supply//precharge_current Date: June 2017 diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c index f37ad4eae60b..d0d549611794 100644 --- a/drivers/power/supply/power_supply_sysfs.c +++ b/drivers/power/supply/power_supply_sysfs.c @@ -61,7 +61,7 @@ static const char * const power_supply_charge_type_text[] = { static const char * const power_supply_health_text[] = { "Unknown", "Good", "Overheat", "Dead", "Over voltage", "Unspecified failure", "Cold", "Watchdog timer expire", - "Safety timer expire", "Over current" + "Safety timer expire", "Over current", "Warm", "Cool", "Hot" }; static const char * const power_supply_technology_text[] = { diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index dcd5a71e6c67..8670e90c1d51 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h @@ -61,6 +61,9 @@ enum { POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE, POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE, POWER_SUPPLY_HEALTH_OVERCURRENT, + POWER_SUPPLY_HEALTH_WARM, + POWER_SUPPLY_HEALTH_COOL, + POWER_SUPPLY_HEALTH_HOT, }; enum { From c6ca683891186b9679b900e617807c74ca5589e2 Mon Sep 17 00:00:00 2001 From: John Stultz Date: Sat, 4 Apr 2020 00:13:49 +0000 Subject: [PATCH 087/136] ANDROID: gki_defconfig: Drop CONFIG_PCIEPORTBUS PCIEPORTBUS is causing trouble for some vendors so drop it for now. Bug: 153142844 Signed-off-by: John Stultz Change-Id: I6680ad8ba9caa938554735d07a4c6cb4cfb6c5f9 --- arch/arm64/configs/gki_defconfig | 2 -- 1 file changed, 2 deletions(-) diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig index 9de932925b59..1d19e02c5a8a 100644 --- a/arch/arm64/configs/gki_defconfig +++ b/arch/arm64/configs/gki_defconfig @@ -207,8 +207,6 @@ CONFIG_CFG80211=y CONFIG_MAC80211=y CONFIG_RFKILL=y CONFIG_PCI=y -CONFIG_PCIEPORTBUS=y -# CONFIG_PCIEAER is not set CONFIG_PCI_HOST_GENERIC=y CONFIG_PCIE_QCOM=y CONFIG_PCIE_KIRIN=y From fa04c81b9eb546696e96d2a3089c0304c81fbd1b Mon Sep 17 00:00:00 2001 From: John Stultz Date: Wed, 8 Apr 2020 04:45:12 +0000 Subject: [PATCH 088/136] ANDROID: KABI: Update kABI after dropping CONFIG_PCIEPORTBUS from gki_defconfig Comparing ABI against expected definition (abi_gki_aarch64.xml) ======================================================== ABI report has been created at /home/docker/repo/out_abi/android-5.4/dist/abi.report ABI DIFFERENCES HAVE BEEN DETECTED! (RC=8) ======================================================== Leaf changes summary: 2 artifacts changed Changed leaf types summary: 1 leaf type changed Removed/Changed/Added functions summary: 1 Removed, 0 Changed, 0 Added function Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable 1 Removed function: [D] 'function bool pcie_aspm_enabled(pci_dev*)' 'struct pci_dev at pci.h:291:1' changed: type size changed from 16448 to 16384 (in bits) 2 data member deletions: 'unsigned int pci_dev::ltr_path', at offset 31 (in bits) at pci.h:363:1 'pcie_link_state* pci_dev::link_state', at offset 1216 (in bits) at pci.h:362:1 there are data member changes: 'unsigned int pci_dev::eetlp_prefix_path' offset changed from 30 to 31 (in bits) (by +1 bits) 'pci_channel_state_t pci_dev::error_state' offset changed from 1312 to 1216 (in bits) (by -96 bits) 'device pci_dev::dev' offset changed from 1344 to 1280 (in bits) (by -64 bits) 'int pci_dev::cfg_size' offset changed from 8128 to 8064 (in bits) (by -64 bits) 'unsigned int pci_dev::irq' offset changed from 8160 to 8096 (in bits) (by -64 bits) 'resource pci_dev::resource[11]' offset changed from 8192 to 8128 (in bits) (by -64 bits) 'bool pci_dev::match_driver' offset changed from 13824 to 13760 (in bits) (by -64 bits) 'unsigned int pci_dev::reset_fn' offset changed from 13824 to 13760 (in bits) (by -64 bits) 'pci_dev_flags_t pci_dev::dev_flags' offset changed from 13872 to 13808 (in bits) (by -64 bits) 'atomic_t pci_dev::enable_cnt' offset changed from 13888 to 13824 (in bits) (by -64 bits) 'u32 pci_dev::saved_config_space[16]' offset changed from 13920 to 13856 (in bits) (by -64 bits) 'hlist_head pci_dev::saved_cap_space' offset changed from 14464 to 14400 (in bits) (by -64 bits) 'bin_attribute* pci_dev::rom_attr' offset changed from 14528 to 14464 (in bits) (by -64 bits) 'int pci_dev::rom_attr_enabled' offset changed from 14592 to 14528 (in bits) (by -64 bits) 'bin_attribute* pci_dev::res_attr[11]' offset changed from 14656 to 14592 (in bits) (by -64 bits) 'bin_attribute* pci_dev::res_attr_wc[11]' offset changed from 15360 to 15296 (in bits) (by -64 bits) 'const attribute_group** pci_dev::msi_irq_groups' offset changed from 16064 to 16000 (in bits) (by -64 bits) 'pci_vpd* pci_dev::vpd' offset changed from 16128 to 16064 (in bits) (by -64 bits) 'phys_addr_t pci_dev::rom' offset changed from 16192 to 16128 (in bits) (by -64 bits) 'size_t pci_dev::romlen' offset changed from 16256 to 16192 (in bits) (by -64 bits) 'char* pci_dev::driver_override' offset changed from 16320 to 16256 (in bits) (by -64 bits) 'unsigned long int pci_dev::priv_flags' offset changed from 16384 to 16320 (in bits) (by -64 bits) 76 impacted interfaces ======================================================== Bug: 153142844 Signed-off-by: John Stultz Change-Id: I44bfe45daf181d3116974f46e8a0ad79f0bd8ac8 --- abi_gki_aarch64.xml | 32693 +++++++++++++++++++++--------------------- 1 file changed, 16321 insertions(+), 16372 deletions(-) diff --git a/abi_gki_aarch64.xml b/abi_gki_aarch64.xml index a847816be9bd..b7c297937251 100644 --- a/abi_gki_aarch64.xml +++ b/abi_gki_aarch64.xml @@ -2153,7 +2153,6 @@ - @@ -4290,17 +4289,6 @@ - - - - - - - - - - - @@ -12938,6 +12926,17 @@ + + + + + + + + + + + @@ -16419,31 +16418,9 @@ - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -16459,7 +16436,7 @@ - + @@ -16520,7 +16497,7 @@ - + @@ -16533,7 +16510,7 @@ - + @@ -16549,7 +16526,7 @@ - + @@ -16562,7 +16539,7 @@ - + @@ -16599,6 +16576,28 @@ + + + + + + + + + + + + + + + + + + + + + + @@ -17524,7 +17523,7 @@ - + @@ -17606,7 +17605,7 @@ - + @@ -17745,7 +17744,7 @@ - + @@ -17754,7 +17753,7 @@ - + @@ -17826,9 +17825,9 @@ - - - + + + @@ -17971,7 +17970,7 @@ - + @@ -29284,7 +29283,7 @@ - + @@ -29298,7 +29297,7 @@ - + @@ -30224,7 +30223,7 @@ - + @@ -30255,14 +30254,14 @@ - + - + @@ -35642,31 +35641,30 @@ - - - + + - + - + - + - + - + @@ -35678,45 +35676,45 @@ - + - + - + - + - + - + - + - + - + - - + + - + - + - + @@ -35724,32 +35722,32 @@ - + - + - + - + - + - + - + - + - + @@ -35775,7 +35773,7 @@ - + @@ -35783,20 +35781,20 @@ - + - + - + - + @@ -35809,12 +35807,12 @@ - + - + @@ -35829,7 +35827,7 @@ - + @@ -35838,16 +35836,16 @@ - + - + - + @@ -35871,7 +35869,7 @@ - + @@ -35889,24 +35887,24 @@ - + - + - + - + - + @@ -35957,16 +35955,16 @@ - + - + - + @@ -36025,31 +36023,25 @@ - - - - - - - - + + - + - + - + - - + + - + @@ -36118,7 +36110,7 @@ - + @@ -36160,58 +36152,58 @@ - - + + - + - - + + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + @@ -36220,7 +36212,7 @@ - + @@ -36228,34 +36220,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -36264,10 +36256,10 @@ - + - + @@ -36290,34 +36282,34 @@ - + - + - + - + - + - + - + - - + + - + @@ -36325,27 +36317,27 @@ - - - - + + + + - + - + - + - + - + - + @@ -36359,232 +36351,231 @@ - + - + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - + + - + - + - + - + - + - + + + + + + + + + + + + + + + - + - - - + + + + - - - - - + + + - - - - + - - - - - - - - - - - + - - + + + + + + + + + + + + - + - - - - - - - - - - + + + + + + + + + - - - + + + - - + + + + - - - + + + - - - + + - - - - - - - - - - - + - - + + - - + + - + - - + + - + - + @@ -36592,24 +36583,24 @@ - + - - + + - - + + - + @@ -36629,25 +36620,25 @@ - - + + + + + + - - - - - + - + - + @@ -36655,7 +36646,7 @@ - + @@ -36670,16 +36661,16 @@ - + - + - + @@ -36694,42 +36685,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -36742,7 +36733,7 @@ - + @@ -36750,11 +36741,11 @@ - + - - + + @@ -36765,22 +36756,22 @@ - + - + - + - + @@ -36788,7 +36779,7 @@ - + @@ -36805,116 +36796,116 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -36928,13 +36919,13 @@ - + - + - + @@ -36942,7 +36933,7 @@ - + @@ -36953,13 +36944,13 @@ - + - + - + @@ -37001,18 +36992,18 @@ - + - + - + - + @@ -37024,7 +37015,7 @@ - + @@ -37047,21 +37038,21 @@ - + - + - + - + - + @@ -37106,7 +37097,7 @@ - + @@ -37130,7 +37121,7 @@ - + @@ -37151,10 +37142,10 @@ - - + + - + @@ -37163,16 +37154,16 @@ - + - + - + @@ -37190,10 +37181,10 @@ - + - + @@ -37201,7 +37192,7 @@ - + @@ -37212,56 +37203,56 @@ - + - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -37302,16 +37293,16 @@ - + - + - + @@ -37326,7 +37317,7 @@ - + @@ -37364,39 +37355,39 @@ - - + + - - + + - - - + + + - - - + + + - - + + - - + + - + @@ -37405,111 +37396,111 @@ - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + + + + + + + + + - - - - - - - - - + - - - + + + - - + + - - + + + + + + + + + + + - + + - + + - - - - - - - - - - - - + @@ -37536,12 +37527,12 @@ - + - + @@ -37557,19 +37548,19 @@ - + - + - + - + @@ -37584,7 +37575,7 @@ - + @@ -37593,29 +37584,29 @@ - + - + - + - + - + - + - + - + - + @@ -37636,7 +37627,7 @@ - + @@ -37645,81 +37636,81 @@ - - - - - - - - - - + + + + + + + + + + - + - - + + - - + + - - + + - - + + - + - - + + - - + + - + - + - + - + - + - + - + - + @@ -37734,13 +37725,13 @@ - - - - + + + + - + @@ -37763,7 +37754,7 @@ - + @@ -37795,7 +37786,7 @@ - + @@ -37803,7 +37794,7 @@ - + @@ -37813,7 +37804,7 @@ - + @@ -37824,7 +37815,7 @@ - + @@ -37834,23 +37825,23 @@ - - + + - + - + - + @@ -37864,8 +37855,8 @@ - - + + @@ -37877,69 +37868,69 @@ - - + + - - + + - - - + + + - - + + - - + + - - + + - + - + - + - - + + - - + + - + - + @@ -37948,7 +37939,7 @@ - + @@ -37987,19 +37978,19 @@ - + - + - + - + @@ -38008,12 +37999,12 @@ - + - + - + @@ -38031,10 +38022,10 @@ - + - + @@ -38054,40 +38045,40 @@ - + - + - + - + - + - + - + - + - + - + @@ -38108,13 +38099,13 @@ - + - + @@ -38123,15 +38114,15 @@ - + - + - + - + @@ -38140,73 +38131,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -38215,20 +38206,20 @@ - + - + - + - + - + - + @@ -38240,15 +38231,15 @@ - + - + - + @@ -38256,7 +38247,7 @@ - + @@ -38264,35 +38255,35 @@ - + - + - + - + - + - + - + - + - + - + @@ -38313,7 +38304,7 @@ - + @@ -38323,117 +38314,117 @@ - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - + + - - - - + + + + + + + + + + + + + - - - - - - - - - - + - - + + + + + + + + + + - - + + - + - - - - - - - - - + - + - + - + - + - + - + @@ -38442,7 +38433,7 @@ - + @@ -38457,7 +38448,7 @@ - + @@ -38472,16 +38463,16 @@ - + - - + + - + @@ -38492,46 +38483,46 @@ - + - + - + - - + + - + - - + + - + - - + + - + - + - + @@ -38542,104 +38533,104 @@ - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - - + + - - + + - - - - - + + + + + - + - + - + - + - + - + - + @@ -38651,28 +38642,28 @@ - + - + - + - + - + - + @@ -38696,24 +38687,24 @@ - + - + - + - + - + - + @@ -38722,7 +38713,7 @@ - + @@ -38748,18 +38739,18 @@ - + - + - + - + @@ -38768,27 +38759,27 @@ - + - + - + - + - + - + - + @@ -38803,16 +38794,16 @@ - + - + - + - + @@ -38827,7 +38818,7 @@ - + @@ -38839,83 +38830,83 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -38932,18 +38923,18 @@ - + - + - + - + @@ -38964,10 +38955,10 @@ - + - + @@ -38975,7 +38966,7 @@ - + @@ -38986,45 +38977,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -39038,7 +39029,7 @@ - + @@ -39061,10 +39052,10 @@ - + - + @@ -39099,7 +39090,7 @@ - + @@ -39125,7 +39116,7 @@ - + @@ -39133,84 +39124,84 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -39218,34 +39209,34 @@ - + - + - + - + - + - + - + - + - + @@ -39295,7 +39286,7 @@ - + @@ -39304,18 +39295,18 @@ - + - + - + - + @@ -39325,30 +39316,30 @@ - + - + - + - + - + - + - + - + - + @@ -39362,7 +39353,7 @@ - + @@ -39376,15 +39367,15 @@ - + - + - + @@ -39393,7 +39384,7 @@ - + @@ -39407,7 +39398,7 @@ - + @@ -39419,12 +39410,12 @@ - + - + @@ -39433,32 +39424,32 @@ - + - + - + - + - + - + - + - + - + @@ -39500,77 +39491,77 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -39596,10 +39587,10 @@ - + - + @@ -39613,7 +39604,7 @@ - + @@ -39630,7 +39621,7 @@ - + @@ -39659,7 +39650,7 @@ - + @@ -39676,7 +39667,7 @@ - + @@ -39685,7 +39676,7 @@ - + @@ -39693,13 +39684,13 @@ - + - + @@ -39713,13 +39704,13 @@ - + - + @@ -39730,13 +39721,13 @@ - + - + @@ -39747,18 +39738,18 @@ - + - + - + - + - + @@ -39784,10 +39775,10 @@ - + - + @@ -39798,31 +39789,31 @@ - + - + - + - + - + - + - + - + - + @@ -39831,42 +39822,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -39875,14 +39866,14 @@ - + - + @@ -39890,13 +39881,13 @@ - + - + - + @@ -39904,26 +39895,26 @@ - + - + - + - + - + - + - + @@ -39938,20 +39929,20 @@ - + - + - + - + - + - + @@ -39960,12 +39951,12 @@ - + - + - + @@ -39975,372 +39966,372 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -40363,7 +40354,7 @@ - + @@ -40383,41 +40374,41 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -40446,7 +40437,7 @@ - + @@ -40455,7 +40446,7 @@ - + @@ -40463,7 +40454,7 @@ - + @@ -40480,7 +40471,7 @@ - + @@ -40489,7 +40480,7 @@ - + @@ -40498,10 +40489,10 @@ - + - + @@ -40509,10 +40500,10 @@ - + - + @@ -40520,9 +40511,9 @@ - + - + @@ -40531,7 +40522,7 @@ - + @@ -40543,15 +40534,15 @@ - + - + - + - + @@ -40559,10 +40550,10 @@ - + - + @@ -40570,7 +40561,7 @@ - + @@ -40584,10 +40575,10 @@ - + - + @@ -40604,10 +40595,10 @@ - + - + @@ -40616,7 +40607,7 @@ - + @@ -40625,19 +40616,19 @@ - + - + - + - + - - + + @@ -40657,10 +40648,10 @@ - + - + @@ -40668,13 +40659,13 @@ - + - + @@ -40682,16 +40673,16 @@ - + - + - + @@ -40702,7 +40693,7 @@ - + @@ -40710,7 +40701,7 @@ - + @@ -40727,10 +40718,10 @@ - + - + @@ -40741,7 +40732,7 @@ - + @@ -40750,7 +40741,7 @@ - + @@ -40761,10 +40752,10 @@ - + - + @@ -40790,7 +40781,7 @@ - + @@ -40808,7 +40799,7 @@ - + @@ -40825,7 +40816,7 @@ - + @@ -40837,7 +40828,7 @@ - + @@ -40854,7 +40845,7 @@ - + @@ -40863,7 +40854,7 @@ - + @@ -40892,7 +40883,7 @@ - + @@ -40930,10 +40921,10 @@ - + - + @@ -40941,9 +40932,9 @@ - + - + @@ -40955,18 +40946,18 @@ - + - + - + - + @@ -40974,13 +40965,13 @@ - + - + - + @@ -40994,16 +40985,16 @@ - + - + - + @@ -41011,13 +41002,13 @@ - + - + @@ -41025,7 +41016,7 @@ - + @@ -41042,7 +41033,7 @@ - + @@ -41059,7 +41050,7 @@ - + @@ -41070,13 +41061,13 @@ - + - + - + @@ -41087,19 +41078,19 @@ - + - + - + @@ -41110,10 +41101,10 @@ - + - + @@ -41130,7 +41121,7 @@ - + @@ -41138,20 +41129,20 @@ - + - + - + - + - + @@ -41159,26 +41150,26 @@ - + - + - + - + - + - + - + @@ -41186,31 +41177,31 @@ - + - + - + - + - + - + - + - + - + @@ -41218,7 +41209,7 @@ - + @@ -41230,7 +41221,7 @@ - + @@ -41238,7 +41229,7 @@ - + @@ -41250,7 +41241,7 @@ - + @@ -41273,10 +41264,10 @@ - + - + @@ -41287,21 +41278,21 @@ - + - + - + - + - + @@ -41309,7 +41300,7 @@ - + @@ -41329,7 +41320,7 @@ - + @@ -41346,385 +41337,397 @@ - + - + - + - + - + - + - + - + - - - + + + + + - + - - - - - + + + + + - + - - - - - + + + + + - + - + - + - - - - - - - - - + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - + + - + - + - + + + + + + + - + - + - + - + + + + + + + - + - + - + - + + - + - - + - + - + - + - + - + - + @@ -41736,13 +41739,13 @@ - + - + @@ -41778,37 +41781,37 @@ - + - + - + - + - + - + @@ -41844,13 +41847,13 @@ - + - + @@ -41874,313 +41877,301 @@ - + - + - + - + - + - + - - - + - - - + + + - + + - - - + - - + + - + + - - - - - - + - - + + - - + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - - + - - + + + + + + + + + + + + + + + - - - + + - - - - - - - - - - - - - + - - + + - + + + + + + + + + + + + - - - - - - - + + + + + + - + - - + + - - + + + - - + + - - - - - - - + + + + + + - - + + - - - - - - + + + + + + - - + + - + - + - - - - - - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + - - - - - - - - - - - + - + @@ -42188,93 +42179,92 @@ - - + + - - + + - + - + + + + + + + + + + + - - - + - - - - - - - - - + - - + + - + - + - + - - + + - + - - + - + - + - + - + - + - + @@ -42288,13 +42278,13 @@ - + - + @@ -42306,89 +42296,88 @@ - + - + - + - + - - - - - - - - - - + + + + + + + + + - - + + - - + + - - + + - + - - + + - + - - + + - - - - - - - - - - - + + + + + + + + + + + - - + + - - + + - + @@ -42396,11 +42385,11 @@ - + - + @@ -42410,37 +42399,37 @@ - + - + - - + + - + - + - + - + - + @@ -42450,51 +42439,51 @@ - + - + - + - - - - - + + + + + - + - + - + - + - + - + @@ -42508,13 +42497,13 @@ - + - + - + @@ -42535,21 +42524,21 @@ - + - + - + - + - + @@ -42558,21 +42547,21 @@ - + - + - + - + - + @@ -42583,10 +42572,10 @@ - + - + @@ -42628,10 +42617,10 @@ - + - + @@ -42640,7 +42629,7 @@ - + @@ -42658,13 +42647,13 @@ - + - + @@ -42676,46 +42665,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -42730,37 +42719,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -42774,16 +42763,16 @@ - + - + - + @@ -42803,12 +42792,12 @@ - + - + @@ -42841,7 +42830,7 @@ - + @@ -42855,19 +42844,19 @@ - + - + - + - + - + @@ -42896,7 +42885,7 @@ - + @@ -42934,7 +42923,7 @@ - + @@ -42952,7 +42941,7 @@ - + @@ -42987,15 +42976,15 @@ - + - + - + - + @@ -43039,7 +43028,7 @@ - + @@ -43084,7 +43073,7 @@ - + @@ -43092,26 +43081,26 @@ - + - + - + - + - + - + - + - + @@ -43129,7 +43118,7 @@ - + @@ -43149,21 +43138,21 @@ - + - + - + - + - + - + @@ -43217,12 +43206,12 @@ - + - + - + @@ -43234,12 +43223,12 @@ - + - + - + @@ -43254,7 +43243,7 @@ - + @@ -43277,24 +43266,24 @@ - + - + - + - + - + @@ -43308,7 +43297,7 @@ - + @@ -43324,7 +43313,7 @@ - + @@ -43332,21 +43321,21 @@ - + - - + + - + - + @@ -43358,24 +43347,24 @@ - + - + - + - + - + - + - + @@ -43422,13 +43411,13 @@ - + - + - + @@ -43446,7 +43435,7 @@ - + @@ -43458,7 +43447,7 @@ - + @@ -43509,53 +43498,53 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -43573,13 +43562,13 @@ - + - + - + @@ -43591,7 +43580,7 @@ - + @@ -43600,7 +43589,7 @@ - + @@ -43610,7 +43599,7 @@ - + @@ -43630,24 +43619,24 @@ - + - + - + - + - + @@ -43659,7 +43648,7 @@ - + @@ -43680,29 +43669,29 @@ - + - + - + - + - + - + - + - + - + @@ -43717,12 +43706,12 @@ - + - + @@ -43731,7 +43720,7 @@ - + @@ -43740,32 +43729,32 @@ - + - + - + - + - + - + - + - + - + @@ -43773,7 +43762,7 @@ - + @@ -43791,7 +43780,7 @@ - + @@ -43799,17 +43788,17 @@ - + - + - + @@ -43820,76 +43809,76 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + @@ -43899,111 +43888,111 @@ - + - - + + - + + + + + + + + + + + + + + + + + + - + + - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + + + + + + + + + + + + + + + + + + + + - + - - - + + - + - - - - - - - - - - - - - - - - - - - + - + @@ -44011,7 +44000,7 @@ - + @@ -44025,52 +44014,52 @@ - - + + - - + + - - - - - - + + + + + + - + - + - + - + - + - + - + - + @@ -44116,19 +44105,19 @@ - + - + - + - + @@ -44158,16 +44147,16 @@ - + - + - + @@ -44175,27 +44164,27 @@ - + - + - + - + - + - + - + - + @@ -44209,18 +44198,18 @@ - + - + - + - + - + @@ -44231,11 +44220,11 @@ - + - + - + @@ -44248,7 +44237,7 @@ - + @@ -44259,7 +44248,7 @@ - + @@ -44270,7 +44259,7 @@ - + @@ -44278,18 +44267,18 @@ - + - + - + @@ -44298,38 +44287,38 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -44338,7 +44327,7 @@ - + @@ -44358,7 +44347,7 @@ - + @@ -44366,12 +44355,12 @@ - + - + @@ -44406,7 +44395,7 @@ - + @@ -44415,79 +44404,79 @@ - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + @@ -44497,60 +44486,60 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -44567,7 +44556,7 @@ - + @@ -44590,54 +44579,54 @@ - - + + - + - + - + - - - - + + + + - + - + - - + + - - + + - - - + + + - + - + @@ -44648,10 +44637,10 @@ - + - + @@ -44696,7 +44685,7 @@ - + @@ -44723,7 +44712,7 @@ - + @@ -44777,19 +44766,19 @@ - + - + - + @@ -44798,10 +44787,10 @@ - + - + @@ -44822,7 +44811,7 @@ - + @@ -44831,13 +44820,13 @@ - + - + @@ -44852,7 +44841,7 @@ - + @@ -44873,83 +44862,83 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -44958,13 +44947,13 @@ - + - + - + @@ -44973,7 +44962,7 @@ - + @@ -44981,7 +44970,7 @@ - + @@ -44999,13 +44988,13 @@ - + - + - + @@ -45031,10 +45020,10 @@ - + - + @@ -45049,7 +45038,7 @@ - + @@ -45084,9 +45073,9 @@ - + - + @@ -45131,34 +45120,34 @@ - + - + - + - + - + - + - + - + - + @@ -45167,16 +45156,16 @@ - + - + - + - + @@ -45185,7 +45174,7 @@ - + @@ -45200,7 +45189,7 @@ - + @@ -45212,7 +45201,7 @@ - + @@ -45241,7 +45230,7 @@ - + @@ -45294,7 +45283,7 @@ - + @@ -45521,7 +45510,7 @@ - + @@ -45541,7 +45530,7 @@ - + @@ -45552,7 +45541,7 @@ - + @@ -45569,7 +45558,7 @@ - + @@ -45595,7 +45584,7 @@ - + @@ -45609,7 +45598,7 @@ - + @@ -45626,9 +45615,9 @@ - + - + @@ -45640,27 +45629,27 @@ - + - + - + - + - + - - + + - + @@ -45671,340 +45660,340 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - - + + - - + + - - + + - - + + - + - - + + - - + + - - - + + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - - + + - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + - - - + + + + + + + + + + + + + + + + + + + + + + - + + - + + - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + @@ -46013,22 +46002,22 @@ - + - + - + - + - + @@ -46036,80 +46025,80 @@ - + - + - + - - + + - + - + - + - + - - + + - - + + - + - - + + - + - + - + @@ -46145,28 +46134,28 @@ - + - - + + - + - + - + - + @@ -46180,166 +46169,166 @@ - - - - - - - + + + + + + + - + - + - + - + - + - + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - - + + - + - + - + - + - + - + @@ -46352,7 +46341,7 @@ - + @@ -46363,7 +46352,7 @@ - + @@ -46374,7 +46363,7 @@ - + @@ -46382,21 +46371,21 @@ - + - + - + - + @@ -46554,7 +46543,7 @@ - + @@ -46562,9 +46551,9 @@ - + - + @@ -46573,17 +46562,17 @@ - - + + - + - + @@ -46591,11 +46580,11 @@ - + - + @@ -46621,13 +46610,13 @@ - + - + - + @@ -46684,16 +46673,16 @@ - + - + - + - + @@ -46813,261 +46802,261 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + + + + + + + + + + + - - - + + + - - - - - + + + + + - - - - - + - + - + - + - - + + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + @@ -47076,7 +47065,7 @@ - + @@ -47090,7 +47079,7 @@ - + @@ -47101,24 +47090,24 @@ - + - + - + - + - + @@ -47126,31 +47115,31 @@ - + - - - + + + + + - + + - - + - - - + @@ -47163,7 +47152,7 @@ - + @@ -47197,12 +47186,12 @@ - + - + @@ -47210,74 +47199,74 @@ + + + + + + + + + + + + + + + - - - - - - + + - - - + + + - - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - + - + - + @@ -47330,7 +47319,7 @@ - + @@ -47344,31 +47333,31 @@ - - + + - - + + - + - + - + - - + + @@ -47376,46 +47365,46 @@ - + - + - + - + - - + + - - + + - + - + - + - + @@ -47457,13 +47446,13 @@ - + - + @@ -47505,7 +47494,7 @@ - + @@ -47517,7 +47506,7 @@ - + @@ -47535,24 +47524,24 @@ - + - + - + - + - + @@ -47573,7 +47562,7 @@ - + @@ -47581,19 +47570,19 @@ - + - + - + - + @@ -47602,13 +47591,13 @@ - + - + @@ -47617,7 +47606,7 @@ - + @@ -47626,16 +47615,16 @@ - + - + - + @@ -47647,7 +47636,7 @@ - + @@ -47656,106 +47645,106 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -47764,7 +47753,7 @@ - + @@ -47772,7 +47761,7 @@ - + @@ -47781,20 +47770,20 @@ - + - + - + - + @@ -47803,8 +47792,8 @@ - - + + @@ -47832,51 +47821,51 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + @@ -47893,121 +47882,121 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -48017,15 +48006,15 @@ - - + + - + - + @@ -48039,60 +48028,60 @@ - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + - + - + - + - - + + + + + + + + + + - - - - - - - - @@ -48102,110 +48091,110 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -48238,7 +48227,7 @@ - + @@ -48247,16 +48236,16 @@ - + - + - + - + @@ -48268,12 +48257,12 @@ - + - + - + @@ -48283,10 +48272,10 @@ - + - + @@ -48295,16 +48284,16 @@ - + - + - + @@ -48319,19 +48308,19 @@ - + - + - + - + - + @@ -48352,7 +48341,7 @@ - + @@ -48409,7 +48398,7 @@ - + @@ -48442,7 +48431,7 @@ - + @@ -48499,7 +48488,7 @@ - + @@ -48508,34 +48497,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -48565,32 +48554,32 @@ - + - + - + - + - + - + - + @@ -48601,32 +48590,32 @@ - + - + - + - + - + - + @@ -48639,7 +48628,7 @@ - + @@ -48652,13 +48641,13 @@ - + - + @@ -48676,22 +48665,22 @@ - + - + - + - + @@ -48703,11 +48692,11 @@ - + - - + + @@ -48715,8 +48704,8 @@ - - + + @@ -48724,7 +48713,7 @@ - + @@ -48732,32 +48721,32 @@ - + - + - + - + - + - + - + - + - + - + @@ -48775,7 +48764,7 @@ - + @@ -48811,10 +48800,10 @@ - + - + @@ -48823,13 +48812,13 @@ - + - + - + @@ -48843,31 +48832,31 @@ - + - + - + - + - + - + - + @@ -48894,7 +48883,7 @@ - + @@ -48912,24 +48901,24 @@ - + - + - + - + - + - + @@ -48938,43 +48927,24 @@ - + - - - - - - - - - - - - - - - - - - - - + - + - + - + @@ -48992,13 +48962,13 @@ - + - + @@ -49036,9 +49006,9 @@ - + - + @@ -49050,24 +49020,24 @@ - + - + - + - + - + - + @@ -49096,21 +49066,21 @@ - + - + - + - + - + @@ -49149,7 +49119,7 @@ - + @@ -49173,16 +49143,16 @@ - + - + - + - + @@ -49200,21 +49170,21 @@ - + - + - + - + - + - + @@ -49247,12 +49217,12 @@ - + - + - + @@ -49267,15 +49237,15 @@ - + - + - + - + @@ -49296,18 +49266,18 @@ - + - + - + - + - + @@ -49319,19 +49289,19 @@ - + - + - + - + @@ -49364,24 +49334,24 @@ - + - + - + - + - + - + - + @@ -49393,13 +49363,13 @@ - + - + @@ -49407,15 +49377,15 @@ - + - + - + @@ -49450,23 +49420,23 @@ - + - + - + - + - + - + @@ -49475,23 +49445,23 @@ - + - + - + - + - + - + - + @@ -49509,10 +49479,10 @@ - + - + @@ -49521,16 +49491,16 @@ - + - + - + - + @@ -49544,10 +49514,10 @@ - + - + @@ -49556,9 +49526,9 @@ - + - + @@ -49582,7 +49552,7 @@ - + @@ -49594,15 +49564,15 @@ - + - + - + - + @@ -49611,13 +49581,13 @@ - + - + - + @@ -49641,7 +49611,7 @@ - + @@ -49656,14 +49626,14 @@ - + - + - + - + @@ -49684,10 +49654,10 @@ - + - + @@ -49696,15 +49666,15 @@ - + - + - + @@ -49713,7 +49683,7 @@ - + @@ -49757,7 +49727,7 @@ - + @@ -49769,47 +49739,47 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -49818,13 +49788,13 @@ - + - + @@ -49832,7 +49802,7 @@ - + @@ -49843,12 +49813,12 @@ - + - + - + @@ -49860,42 +49830,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -49930,10 +49900,10 @@ - + - + @@ -49945,19 +49915,19 @@ - + - + - + - + - + @@ -49986,7 +49956,7 @@ - + @@ -50013,7 +49983,7 @@ - + @@ -50048,7 +50018,7 @@ - + @@ -50060,13 +50030,13 @@ - + - + - + @@ -50075,7 +50045,7 @@ - + @@ -50084,16 +50054,16 @@ - + - + - + @@ -50108,26 +50078,26 @@ - + - + - + - + - + - + - + - + @@ -50148,7 +50118,7 @@ - + @@ -50156,7 +50126,7 @@ - + @@ -50170,7 +50140,7 @@ - + @@ -50181,15 +50151,15 @@ - + - + - + @@ -50203,29 +50173,29 @@ - + - + - + - + - + - + - + @@ -50237,10 +50207,10 @@ - + - + @@ -50258,30 +50228,30 @@ - + - + - + - + - + - + - + - + @@ -50289,7 +50259,7 @@ - + @@ -50306,7 +50276,7 @@ - + @@ -50314,55 +50284,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50371,19 +50341,19 @@ - - + + - + - + @@ -50401,7 +50371,7 @@ - + @@ -50410,7 +50380,7 @@ - + @@ -50427,13 +50397,13 @@ - + - + @@ -50451,24 +50421,24 @@ - + - + - + - + - + @@ -50477,10 +50447,10 @@ - + - + @@ -50495,13 +50465,13 @@ - + - + - + @@ -50510,28 +50480,28 @@ - + - + - + - + - + - + @@ -50546,12 +50516,12 @@ - + - + - + @@ -50563,99 +50533,99 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50678,7 +50648,7 @@ - + @@ -50704,10 +50674,10 @@ - + - + @@ -50733,7 +50703,7 @@ - + @@ -50741,7 +50711,7 @@ - + @@ -50750,7 +50720,7 @@ - + @@ -50776,15 +50746,15 @@ - + - + - + @@ -50792,7 +50762,7 @@ - + @@ -50806,42 +50776,42 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -50864,37 +50834,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -50909,7 +50879,7 @@ - + @@ -50947,10 +50917,10 @@ - + - + @@ -50974,20 +50944,20 @@ - + - + - + - - + + @@ -50995,7 +50965,7 @@ - + @@ -51003,26 +50973,26 @@ - + - + - + - + - + - + - + - + @@ -51051,20 +51021,20 @@ - + - + - + - + - + @@ -51073,18 +51043,18 @@ - + - + - + - + - + @@ -51093,10 +51063,10 @@ - + - + @@ -51104,7 +51074,7 @@ - + @@ -51112,7 +51082,7 @@ - + @@ -51121,34 +51091,34 @@ - + - + - + - + - + - + - + - + @@ -51157,10 +51127,10 @@ - + - + @@ -51171,7 +51141,7 @@ - + @@ -51180,7 +51150,7 @@ - + @@ -51209,36 +51179,16 @@ - - - - - - - - - - - - - - - - - - - - - - + + - + - + @@ -51246,8 +51196,8 @@ - - + + @@ -51258,7 +51208,7 @@ - + @@ -51272,7 +51222,7 @@ - + @@ -51280,10 +51230,10 @@ - + - + @@ -51297,9 +51247,9 @@ - + - + @@ -51311,17 +51261,17 @@ - + - + - + - - + + @@ -51329,7 +51279,7 @@ - + @@ -51337,88 +51287,88 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -51441,8 +51391,8 @@ - - + + @@ -51450,13 +51400,13 @@ - + - + @@ -51464,21 +51414,21 @@ - - + + - + - + - + - + @@ -51492,8 +51442,8 @@ - - + + @@ -51507,27 +51457,27 @@ - + - + - + - + - + - + - + - + @@ -51548,10 +51498,10 @@ - + - + @@ -51563,7 +51513,7 @@ - + @@ -51574,13 +51524,13 @@ - + - + - + @@ -51588,12 +51538,12 @@ - + - + @@ -51619,7 +51569,7 @@ - + @@ -51628,242 +51578,241 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + @@ -51871,15 +51820,15 @@ - + - + - + @@ -51887,37 +51836,37 @@ - + - + - - + + - + - + - + - + - + @@ -51927,7 +51876,7 @@ - + @@ -51941,53 +51890,53 @@ - + - + - - - + + + - + - + - - + + - + - - - + + + - - + + - - + + - - + + @@ -51995,129 +51944,129 @@ - - + + - - + + - - + + - - + + - - + + - + - - + + - + - - - + + + - + - - + + - + - + - + - - - + + + - + - - + + - - - + + + - - - + + + - - - + + + - + - - + + - + - - + + - + - + - + - - + + - - + + - + - + - + @@ -52127,406 +52076,406 @@ - + - + - + - - + + - - + + - + - + - + - + - - + + - + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - - - + + + + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - + - - + + - + - - - + + + - - + + - - + + - + - - + + - + - + - + - + - + - - + + - + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - + - + - + - - + + - - + + - - + + - - - + + + - - + + - - + + - + - + - + - + - - + + - - + + - - + + - + - - + + - - + + - + - - - - + + + + @@ -52536,46 +52485,46 @@ - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - + @@ -52583,57 +52532,57 @@ - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -52641,23 +52590,23 @@ - + - + - + - + - + - + - + @@ -52667,7 +52616,7 @@ - + @@ -52675,10 +52624,10 @@ - + - + @@ -52692,8 +52641,8 @@ - - + + @@ -52711,23 +52660,23 @@ - + - + - - + + - + @@ -52741,7 +52690,7 @@ - + @@ -52754,80 +52703,80 @@ - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -52854,24 +52803,24 @@ - + - + - + - + - + @@ -52919,9 +52868,9 @@ - + - + @@ -52930,13 +52879,13 @@ - + - + @@ -52965,15 +52914,15 @@ - + - + - + - + @@ -52982,7 +52931,7 @@ - + @@ -52997,7 +52946,7 @@ - + @@ -53023,7 +52972,7 @@ - + @@ -53040,7 +52989,7 @@ - + @@ -53054,7 +53003,7 @@ - + @@ -53080,14 +53029,14 @@ - + - + @@ -53128,7 +53077,7 @@ - + @@ -53136,7 +53085,7 @@ - + @@ -53144,7 +53093,7 @@ - + @@ -53155,10 +53104,10 @@ - + - + @@ -53167,43 +53116,43 @@ - + - + - + - + - + - + - + - + - + - + @@ -53299,22 +53248,22 @@ - + - + - + - + - + @@ -53335,7 +53284,7 @@ - + @@ -53347,7 +53296,7 @@ - + @@ -53357,7 +53306,7 @@ - + @@ -53398,13 +53347,13 @@ - + - + @@ -53431,12 +53380,12 @@ - + - + @@ -53480,24 +53429,24 @@ - + - + - + - + - + - + - + @@ -53512,7 +53461,7 @@ - + @@ -53526,7 +53475,7 @@ - + @@ -53540,7 +53489,7 @@ - + @@ -53566,7 +53515,7 @@ - + @@ -53589,10 +53538,10 @@ - + - + @@ -53609,7 +53558,7 @@ - + @@ -53620,21 +53569,21 @@ - + - + - + - + - + @@ -53643,7 +53592,7 @@ - + @@ -53669,7 +53618,7 @@ - + @@ -53677,16 +53626,16 @@ - + - + - + @@ -53694,7 +53643,7 @@ - + @@ -53708,9 +53657,9 @@ - + - + @@ -53719,13 +53668,13 @@ - + - + @@ -53739,13 +53688,13 @@ - + - + - + @@ -53769,7 +53718,7 @@ - + @@ -53777,7 +53726,7 @@ - + @@ -53806,7 +53755,7 @@ - + @@ -53863,10 +53812,10 @@ - + - + @@ -53881,7 +53830,7 @@ - + @@ -53898,8 +53847,8 @@ - - + + @@ -53913,7 +53862,7 @@ - + @@ -53936,16 +53885,16 @@ - + - + - + @@ -53954,50 +53903,50 @@ - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -54010,23 +53959,23 @@ - + - - + + - - - + + + - + @@ -54042,7 +53991,7 @@ - + @@ -54072,7 +54021,7 @@ - + @@ -54080,11 +54029,11 @@ - + - + @@ -54093,7 +54042,7 @@ - + @@ -54103,7 +54052,7 @@ - + @@ -54124,11 +54073,11 @@ - + - + @@ -54139,8 +54088,8 @@ - - + + @@ -54172,7 +54121,7 @@ - + @@ -54181,11 +54130,11 @@ - + - + @@ -54197,14 +54146,14 @@ - + - + - + @@ -54222,11 +54171,11 @@ - + - + @@ -54234,74 +54183,74 @@ - + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - + - + - - + + - - + + - + - + - + @@ -54340,7 +54289,7 @@ - + @@ -54358,7 +54307,7 @@ - + @@ -54370,19 +54319,19 @@ - + - + - + - + - + @@ -54394,10 +54343,10 @@ - + - + @@ -54421,7 +54370,7 @@ - + @@ -54429,46 +54378,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -54486,20 +54435,20 @@ - - - - - - - - - - - - + + + + + + + + + + + + - + @@ -54507,7 +54456,7 @@ - + @@ -54517,7 +54466,7 @@ - + @@ -54534,22 +54483,22 @@ - - + + - - + + - + - + @@ -54612,20 +54561,20 @@ - + - + - + - + @@ -54635,7 +54584,7 @@ - + @@ -54645,7 +54594,7 @@ - + @@ -54655,7 +54604,7 @@ - + @@ -54665,7 +54614,7 @@ - + @@ -54674,57 +54623,57 @@ - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - - - + + + + @@ -54744,22 +54693,22 @@ - + - + - + - - + + - + @@ -54768,7 +54717,7 @@ - + @@ -54789,12 +54738,12 @@ - + - + - + @@ -54806,7 +54755,7 @@ - + @@ -54817,59 +54766,59 @@ - + - - + + - - - - - - - - - - - + + + + + + + + + + + - - + + - - - + + + - + - - + + - - + + - - - + + + - - - + + + @@ -54878,8 +54827,8 @@ - - + + @@ -54908,7 +54857,7 @@ - + @@ -54919,13 +54868,13 @@ - + - - - - + + + + @@ -54990,7 +54939,7 @@ - + @@ -55010,44 +54959,44 @@ - + - + - + - + - + - + - + - + - + @@ -55086,11 +55035,11 @@ - + - + @@ -55113,7 +55062,7 @@ - + @@ -55127,12 +55076,12 @@ - - + + - - + + @@ -55174,7 +55123,7 @@ - + @@ -55188,21 +55137,21 @@ - + - + - + - + - + @@ -55214,20 +55163,20 @@ - + - + - - - - - - + + + + + + @@ -55249,16 +55198,16 @@ - + - + - + @@ -55271,8 +55220,8 @@ - - + + @@ -55299,28 +55248,28 @@ - - + + - + - + - + - + @@ -55332,23 +55281,23 @@ - + - + - - - - + + + + @@ -55359,13 +55308,13 @@ - + - - + + @@ -55374,13 +55323,13 @@ - - + + - + @@ -55416,19 +55365,19 @@ - + - - - + + + - + - + @@ -55441,12 +55390,12 @@ - + - + - + @@ -55454,7 +55403,7 @@ - + @@ -55466,48 +55415,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -55528,7 +55477,7 @@ - + @@ -55605,15 +55554,15 @@ - + - + - + @@ -55669,7 +55618,7 @@ - + @@ -55687,16 +55636,16 @@ - + - + - + @@ -55705,33 +55654,33 @@ - + - + - + - + - + - + - + - + - + - + @@ -55751,24 +55700,24 @@ - + - + - + - + - + - + @@ -55780,10 +55729,10 @@ - + - + @@ -55810,7 +55759,7 @@ - + @@ -55818,66 +55767,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -55906,10 +55855,10 @@ - + - + @@ -55917,7 +55866,7 @@ - + @@ -55925,13 +55874,13 @@ - + - + @@ -55940,14 +55889,14 @@ - + - + @@ -55964,13 +55913,13 @@ - + - + @@ -55987,55 +55936,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -56043,67 +55992,67 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -56126,27 +56075,27 @@ - + - + - + - + - + - + @@ -56164,20 +56113,20 @@ - + - + - + @@ -56185,23 +56134,23 @@ - + - + - + - + @@ -56217,208 +56166,208 @@ - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + - + - - - - - - - - - - + - - - - - - + + + - - + + - - + - - - - - - - - - - - - - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - + - + @@ -56430,8 +56379,8 @@ - - + + @@ -56445,13 +56394,35 @@ + + + + + + + + + + + + + + + + + + + + + + - + @@ -56463,11 +56434,11 @@ - + - + @@ -56489,18 +56460,18 @@ - + - + - + - + @@ -56516,19 +56487,19 @@ - + - + - + - + - + @@ -56539,11 +56510,11 @@ - + - - + + @@ -56578,7 +56549,7 @@ - + @@ -56591,16 +56562,16 @@ - + - + - + @@ -56660,96 +56631,45 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -56764,19 +56684,19 @@ - + - + - + - + @@ -56803,31 +56723,31 @@ - + - - - - - - - - - - - - + + + + + + + + + + + + - + @@ -56836,11 +56756,11 @@ - + - + @@ -56868,14 +56788,14 @@ - + - + - + @@ -56884,37 +56804,37 @@ - - + + - - + + - - + + - - + + - - + + - - + + - + @@ -56922,13 +56842,13 @@ - + - - + + @@ -56958,7 +56878,7 @@ - + @@ -56972,11 +56892,11 @@ - + - - + + @@ -56994,65 +56914,65 @@ - + - + - + - + - + - - + + - + - + - + - - + + - - + + - + - + @@ -57061,30 +56981,30 @@ - + - + - + - + - - + + - + - + @@ -57092,10 +57012,10 @@ - + - + @@ -57106,33 +57026,33 @@ - + - - - + + + - + - + - + - + - + - + @@ -57143,7 +57063,7 @@ - + @@ -57152,7 +57072,7 @@ - + @@ -57163,12 +57083,12 @@ - + - + @@ -57198,36 +57118,36 @@ - + - + - + - + - + - + - + - + @@ -57236,16 +57156,16 @@ - + - + - + @@ -57256,27 +57176,27 @@ - + - + - + - + - + - + - + - + @@ -57284,16 +57204,16 @@ - + - + - + @@ -57301,15 +57221,15 @@ - + - + - + - + @@ -57317,7 +57237,7 @@ - + @@ -57328,44 +57248,44 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -57393,26 +57313,26 @@ - + - + - + - + - + - + @@ -57421,43 +57341,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -57472,7 +57392,7 @@ - + @@ -57484,18 +57404,18 @@ - + - + - + - + @@ -57504,19 +57424,19 @@ - + - + - + - + - + @@ -57528,7 +57448,7 @@ - + @@ -57546,10 +57466,10 @@ - + - + @@ -57558,66 +57478,66 @@ - + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -57631,9 +57551,9 @@ - + - + @@ -57655,15 +57575,15 @@ - + - + - + - + @@ -57695,42 +57615,42 @@ - + - - + + - + - + - + - + - + - + @@ -57738,117 +57658,117 @@ - + - + - + - - + + - - + + - + - - + + - + - - + + - - + + - + - + - + - + - + - + - - - + + + - - + + - - + + - + - - + + @@ -57871,18 +57791,18 @@ - + - - + + + + + + + + - - - - - - @@ -57906,7 +57826,7 @@ - + @@ -57926,13 +57846,13 @@ - - + + - + @@ -57940,56 +57860,56 @@ - - - + + + - - - + + + - - + + - - + + - + - - + + - - - + + + - - + + - - + + @@ -57997,39 +57917,39 @@ - - + + - + - - + + - + - + - + - + @@ -58050,13 +57970,13 @@ - + - + @@ -58067,7 +57987,7 @@ - + @@ -58147,7 +58067,7 @@ - + @@ -58156,17 +58076,17 @@ - - - - - - - - + + + + + + + + - + @@ -58191,15 +58111,15 @@ - + - + - + @@ -58228,22 +58148,22 @@ - + - + - + - + - + @@ -58251,7 +58171,7 @@ - + @@ -58259,16 +58179,16 @@ - - - + + + - + - + @@ -58286,26 +58206,26 @@ - + - + - + - + - + @@ -58321,7 +58241,7 @@ - + @@ -58329,7 +58249,7 @@ - + @@ -58338,12 +58258,12 @@ - + - + @@ -58352,7 +58272,7 @@ - + @@ -58361,45 +58281,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -58413,32 +58333,32 @@ - + - + - + - + - + - + - + @@ -58446,21 +58366,21 @@ - + - + - + - + @@ -58468,111 +58388,111 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - + - + - + - - + + - + - + - + - + - - - + + + - - - - + + + + - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + - + - - - + + + - - - - + + + + @@ -58585,11 +58505,11 @@ - - + + - + @@ -58615,7 +58535,7 @@ - + @@ -58624,13 +58544,13 @@ - + - + @@ -58638,11 +58558,11 @@ - - - + + + - + @@ -58651,116 +58571,116 @@ - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - - - - + + + + @@ -58768,19 +58688,19 @@ - + - + - + - + @@ -58807,11 +58727,11 @@ - - - + + + - + @@ -58832,7 +58752,7 @@ - + @@ -58853,10 +58773,10 @@ - + - + @@ -58874,7 +58794,7 @@ - + @@ -58886,7 +58806,7 @@ - + @@ -58900,7 +58820,7 @@ - + @@ -58915,13 +58835,13 @@ - + - + @@ -58945,7 +58865,7 @@ - + @@ -59053,12 +58973,12 @@ - + - + @@ -59073,18 +58993,18 @@ - + - + - + @@ -59093,7 +59013,7 @@ - + @@ -59134,16 +59054,16 @@ - + - + - + - + @@ -59188,7 +59108,7 @@ - + @@ -59208,8 +59128,8 @@ - - + + @@ -59217,113 +59137,113 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -59337,12 +59257,12 @@ - + - + - + @@ -59356,7 +59276,7 @@ - + @@ -59376,38 +59296,38 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -59416,130 +59336,130 @@ - - - + + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + @@ -59581,28 +59501,28 @@ - + - + - + - + - + - + @@ -59613,30 +59533,30 @@ - + - + - + - + - + - + - + - + @@ -59654,7 +59574,7 @@ - + @@ -59677,59 +59597,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -59737,26 +59657,26 @@ - + - + - + - + - + - + - + @@ -59767,38 +59687,38 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -59818,34 +59738,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -59866,220 +59786,220 @@ - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + - - + + - + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + @@ -60120,7 +60040,7 @@ - + @@ -60147,26 +60067,26 @@ - + - + - + - + - - + + @@ -60180,13 +60100,13 @@ - + - + @@ -60198,10 +60118,10 @@ - + - + @@ -60222,7 +60142,7 @@ - + @@ -60239,41 +60159,41 @@ - + - - - - - - - - + + + + + + + + - - + + - + - + - + @@ -60282,7 +60202,7 @@ - + @@ -60293,7 +60213,7 @@ - + @@ -60326,10 +60246,10 @@ - + - + @@ -60359,7 +60279,7 @@ - + @@ -60371,36 +60291,36 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -60429,7 +60349,7 @@ - + @@ -60437,10 +60357,10 @@ - + - + @@ -60448,29 +60368,29 @@ - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -60478,7 +60398,7 @@ - + @@ -60486,55 +60406,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -60547,7 +60467,7 @@ - + @@ -60564,19 +60484,19 @@ - - + + - + - + - + - + @@ -60597,18 +60517,18 @@ - + - + - + - + @@ -60622,64 +60542,64 @@ - + - + - - - - - - + + + + + + - + - + - + - + - + - - - - + + + + - - + + - - - - + + + + - + - + @@ -60772,19 +60692,19 @@ - + - + - + - + @@ -60964,13 +60884,13 @@ - + - + @@ -60982,7 +60902,7 @@ - + @@ -60991,7 +60911,7 @@ - + @@ -61023,10 +60943,10 @@ - + - + @@ -61164,7 +61084,7 @@ - + @@ -61182,7 +61102,7 @@ - + @@ -61190,7 +61110,7 @@ - + @@ -61198,85 +61118,85 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -61336,10 +61256,10 @@ - + - + @@ -61351,18 +61271,18 @@ - + - + - + - + @@ -61407,10 +61327,10 @@ - + - + @@ -61425,10 +61345,10 @@ - + - + @@ -61446,9 +61366,9 @@ - + - + @@ -61472,7 +61392,7 @@ - + @@ -61480,7 +61400,7 @@ - + @@ -61497,24 +61417,24 @@ - + - + - + - + - + - + - + @@ -61565,7 +61485,7 @@ - + @@ -61574,7 +61494,7 @@ - + @@ -61582,7 +61502,7 @@ - + @@ -61592,7 +61512,7 @@ - + @@ -61603,13 +61523,13 @@ - - + + - + @@ -61621,141 +61541,141 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - + @@ -61781,7 +61701,7 @@ - + @@ -61792,7 +61712,7 @@ - + @@ -61803,29 +61723,29 @@ - + - + - + - + - + - + - + - - + + @@ -61851,27 +61771,27 @@ - + - + - - - - - - - - + + + + + + + + - + @@ -61881,91 +61801,91 @@ - - + + - - + + - + - + - - + + - - - + + + - - - + + + - - + + - + - - + + - + - + - + - + - - + + - + - + @@ -61978,7 +61898,7 @@ - + @@ -61989,7 +61909,7 @@ - + @@ -62000,7 +61920,7 @@ - + @@ -62014,15 +61934,15 @@ - + - + - + @@ -62033,7 +61953,7 @@ - + @@ -62041,9 +61961,9 @@ - + - + @@ -62052,30 +61972,30 @@ - + - - + + - + - + - + - + @@ -62113,7 +62033,7 @@ - + @@ -62139,45 +62059,45 @@ - - - + + + - + - + - + - - + + - - + + - - + + - + - + @@ -62191,7 +62111,7 @@ - + @@ -62206,7 +62126,7 @@ - + @@ -62248,10 +62168,10 @@ - + - + @@ -62259,13 +62179,13 @@ - + - + - + @@ -62277,7 +62197,7 @@ - + @@ -62291,18 +62211,18 @@ - + - + - + - + @@ -62314,25 +62234,25 @@ - + - + - + - + - + - + @@ -62347,7 +62267,7 @@ - + @@ -62371,13 +62291,13 @@ - + - + @@ -62389,7 +62309,7 @@ - + @@ -62410,7 +62330,7 @@ - + @@ -62452,25 +62372,25 @@ - + - + - + - + @@ -62485,13 +62405,13 @@ - + - + - + @@ -62500,13 +62420,13 @@ - + - + @@ -62515,7 +62435,7 @@ - + @@ -62527,32 +62447,32 @@ - + - + - + - + - + - + - + - + - + @@ -62573,7 +62493,7 @@ - + @@ -62587,12 +62507,12 @@ - + - + - + @@ -62607,7 +62527,7 @@ - + @@ -62616,10 +62536,10 @@ - + - + @@ -62630,19 +62550,19 @@ - + - + - + @@ -62652,18 +62572,18 @@ - + - + - + - + - + @@ -62678,7 +62598,7 @@ - + @@ -62720,29 +62640,29 @@ - + - + - + - + - + - + - + - + - + @@ -62750,7 +62670,7 @@ - + @@ -62776,23 +62696,23 @@ - + - + - + - + - + - + - + @@ -62803,10 +62723,10 @@ - + - + @@ -62820,77 +62740,77 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -62913,7 +62833,7 @@ - + @@ -62929,23 +62849,23 @@ - + - + - + - + - + - + @@ -62969,59 +62889,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -63029,7 +62949,7 @@ - + @@ -63052,7 +62972,7 @@ - + @@ -63060,59 +62980,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -63124,42 +63044,42 @@ - + - + - + - + - + - + - + - + - + - + @@ -63179,23 +63099,23 @@ - + - + - + - + - + - + - + @@ -63213,15 +63133,15 @@ - + - + - + @@ -63229,7 +63149,7 @@ - + @@ -63253,14 +63173,14 @@ - + - + @@ -63277,7 +63197,7 @@ - + @@ -63298,15 +63218,15 @@ - + - + - + @@ -63314,7 +63234,7 @@ - + @@ -63337,15 +63257,15 @@ - + - + - + @@ -63359,15 +63279,15 @@ - + - + - + @@ -63381,7 +63301,7 @@ - + @@ -63393,7 +63313,7 @@ - + @@ -63407,7 +63327,7 @@ - + @@ -63434,7 +63354,7 @@ - + @@ -63448,53 +63368,53 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -63515,7 +63435,7 @@ - + @@ -63523,52 +63443,52 @@ - + - + - + - + - + - - - + + + - - - + + + - - - + + + @@ -63576,141 +63496,141 @@ - + - + - + - + - + - + - + - - - + + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - - - + + + + + - - - + + + - - - - + + + + - - + + - - + + - + - - - + + + - - + + - - + + - - + + - - - - + + + + - - + + - - + + - - + + - + @@ -63721,7 +63641,7 @@ - + @@ -63733,33 +63653,33 @@ - + - + - + - - - - - + + + + + - + - - + + - - + + @@ -63773,8 +63693,8 @@ - - + + @@ -63784,10 +63704,10 @@ - - - - + + + + @@ -63797,12 +63717,12 @@ - + - + @@ -63817,7 +63737,7 @@ - + @@ -63835,7 +63755,7 @@ - + @@ -63853,22 +63773,22 @@ - + - + - + - + - + - + @@ -63883,19 +63803,19 @@ - + - + - + - + @@ -63910,26 +63830,26 @@ - + - + - + - + - + - + - + @@ -63937,7 +63857,7 @@ - + @@ -63965,25 +63885,25 @@ - + - + - + - - + + - + @@ -63994,37 +63914,37 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - + @@ -64035,7 +63955,7 @@ - + @@ -64045,15 +63965,15 @@ - - + + - - + + @@ -64061,49 +63981,49 @@ - + - + - + - + - - + + - + - + - + - - + + - + @@ -64113,7 +64033,7 @@ - + @@ -64130,20 +64050,20 @@ - + - + - + - - - - + + + + - + @@ -64152,19 +64072,19 @@ - + - + - + - + - + @@ -64172,7 +64092,7 @@ - + @@ -64183,21 +64103,21 @@ - + - + - + - + - + - + @@ -64205,7 +64125,7 @@ - + @@ -64216,7 +64136,7 @@ - + @@ -64224,27 +64144,27 @@ - + - + - + - + - + @@ -64252,12 +64172,12 @@ - + - + - + @@ -64266,9 +64186,9 @@ - + - + @@ -64277,9 +64197,9 @@ - + - + @@ -64294,7 +64214,7 @@ - + @@ -64302,21 +64222,21 @@ - - - - + + + + + + + + + + + + - - - - - - - - @@ -64327,7 +64247,7 @@ - + @@ -64378,54 +64298,54 @@ - - + + - - - + + + - - - + + + - - + + - - - + + + - - + + - - + + - + - + - + @@ -64433,74 +64353,74 @@ - + - + - + - + - + - + - - - - - - - - + + + + + + + + - + - + - + - + - + - + - + @@ -64509,29 +64429,29 @@ - + - + - + - + - - + + - - + + @@ -64539,8 +64459,8 @@ - - + + @@ -64548,12 +64468,12 @@ - - + + - - + + @@ -64582,19 +64502,19 @@ - - + + - + - + - + @@ -64642,30 +64562,30 @@ - + - + - + - + - + - + - + @@ -64695,57 +64615,57 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -64783,19 +64703,19 @@ - + - + - + - + @@ -64811,10 +64731,10 @@ - + - + @@ -64823,7 +64743,7 @@ - + @@ -64841,36 +64761,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -64881,7 +64801,7 @@ - + @@ -64904,42 +64824,42 @@ - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -64949,126 +64869,126 @@ - + - + - + - + - + - + - + - + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -65082,17 +65002,17 @@ - + - + - + @@ -65101,20 +65021,20 @@ - - + + - - + + - - + + @@ -65131,24 +65051,24 @@ - + - + - + - + - - - - + + + + @@ -65168,31 +65088,31 @@ - - + + - + - + - + - + - + @@ -65200,7 +65120,7 @@ - + @@ -65214,13 +65134,13 @@ - + - + - + @@ -65262,13 +65182,13 @@ - + - + - + @@ -65289,10 +65209,10 @@ - + - + @@ -65300,54 +65220,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -65367,7 +65287,7 @@ - + @@ -65382,39 +65302,39 @@ - + - + - + - + - + - + - + - + - + - + @@ -65422,7 +65342,7 @@ - + @@ -65433,7 +65353,7 @@ - + @@ -65460,9 +65380,9 @@ - + - + @@ -65474,21 +65394,21 @@ - + - + - + - + - + @@ -65499,7 +65419,7 @@ - + @@ -65510,24 +65430,24 @@ - + - + - + - + - + - + - + @@ -65538,59 +65458,59 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + @@ -65600,123 +65520,123 @@ - - + + - - - + + + - - - + + + - - - + + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - - + + - + + - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -65727,7 +65647,7 @@ - + @@ -65735,27 +65655,27 @@ - - + + - + - + - + - + @@ -65769,44 +65689,44 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -65830,7 +65750,7 @@ - + @@ -65839,7 +65759,7 @@ - + @@ -65851,97 +65771,97 @@ - - - - - - - - - - + + + + + + + + + + - + - + - - + + - + - + - + - - + + - - + + - - + + - + - + - + - - + + - - + + - - + + - - - - + + + + @@ -65955,46 +65875,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -66003,7 +65923,7 @@ - + @@ -66014,19 +65934,19 @@ - + - + - + - + @@ -66050,13 +65970,13 @@ - + - + - + @@ -66074,7 +65994,7 @@ - + @@ -66104,7 +66024,7 @@ - + @@ -66143,10 +66063,10 @@ - + - + @@ -66154,7 +66074,7 @@ - + @@ -66184,31 +66104,31 @@ - + - + - + - + - + - + - + @@ -66234,50 +66154,50 @@ - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + @@ -66331,9 +66251,9 @@ - + - + @@ -66345,7 +66265,7 @@ - + @@ -66357,12 +66277,12 @@ - + - + - + @@ -66383,144 +66303,144 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -66534,7 +66454,7 @@ - + @@ -66542,13 +66462,13 @@ - + - + @@ -66565,266 +66485,266 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - + - + @@ -66832,7 +66752,7 @@ - + @@ -66840,10 +66760,10 @@ - + - + @@ -66852,7 +66772,7 @@ - + @@ -66860,94 +66780,94 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + - + @@ -66961,116 +66881,116 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + @@ -67082,35 +67002,35 @@ - + - - + + - + - - + + - + - + - + - + @@ -67164,7 +67084,7 @@ - + @@ -67173,19 +67093,19 @@ - + - + - + - + - + @@ -67194,7 +67114,7 @@ - + @@ -67205,55 +67125,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67286,13 +67206,13 @@ - + - + - + @@ -67301,10 +67221,10 @@ - + - + @@ -67319,7 +67239,7 @@ - + @@ -67346,7 +67266,7 @@ - + @@ -67358,16 +67278,16 @@ - + - + - + @@ -67378,10 +67298,10 @@ - + - + @@ -67398,18 +67318,18 @@ - + - + - + - + - + @@ -67418,16 +67338,16 @@ - + - + - + @@ -67438,7 +67358,7 @@ - + @@ -67473,27 +67393,27 @@ - + - + - + - + - + - + @@ -67508,88 +67428,88 @@ - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67601,10 +67521,10 @@ - + - + @@ -67625,10 +67545,10 @@ - + - + @@ -67649,27 +67569,27 @@ - + - + - + - + - + @@ -67687,7 +67607,7 @@ - + @@ -67701,7 +67621,7 @@ - + @@ -67713,16 +67633,16 @@ - + - + - + - + @@ -67749,73 +67669,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67823,11 +67743,11 @@ - + - - + + @@ -67838,13 +67758,13 @@ - - + + - + @@ -67854,18 +67774,18 @@ - + - + - + - + @@ -67874,26 +67794,26 @@ - + - + - + - + - + - - + + @@ -67904,24 +67824,24 @@ - - - + + + - + - + - + @@ -67944,15 +67864,15 @@ - + - + - + @@ -67960,7 +67880,7 @@ - + @@ -67968,7 +67888,7 @@ - + @@ -67989,10 +67909,10 @@ - + - + @@ -68006,9 +67926,9 @@ - + - + @@ -68017,10 +67937,10 @@ - + - + @@ -68041,7 +67961,7 @@ - + @@ -68053,25 +67973,25 @@ - + - + - + - + - + @@ -68082,10 +68002,10 @@ - + - + @@ -68093,7 +68013,7 @@ - + @@ -68101,15 +68021,15 @@ - + - + - + - + @@ -68120,88 +68040,88 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -68232,7 +68152,7 @@ - + @@ -68242,22 +68162,22 @@ - - + + - + - + - + @@ -68267,31 +68187,31 @@ - + - + - + - + - + - + - + @@ -68299,7 +68219,7 @@ - + @@ -68308,7 +68228,7 @@ - + @@ -68316,7 +68236,7 @@ - + @@ -68324,231 +68244,231 @@ - + - + - + - + - + - - - + + + - - + + - - + + - - + + - + - + - + - + - - + + - - + + - - - + + + - - - + + + - - - + + + - - + + - - + + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - - + + + + - - + + - - + + - - + + - + - + - + - + - - - + + + - - + + - + - + @@ -68568,29 +68488,29 @@ - + - + - + - + - + - + - + @@ -68614,18 +68534,18 @@ - + - + - + @@ -68646,24 +68566,24 @@ - + - + - + - - + + @@ -68679,8 +68599,8 @@ - - + + @@ -68688,7 +68608,7 @@ - + @@ -68696,18 +68616,18 @@ - - + + - - + + - - + + @@ -68757,9 +68677,9 @@ - - - + + + @@ -68789,11 +68709,11 @@ - - + + - + @@ -68836,9 +68756,9 @@ - + - + @@ -68849,7 +68769,7 @@ - + @@ -68867,31 +68787,31 @@ - + - + - - + + - + - + - + @@ -68905,24 +68825,24 @@ - + - + - + - - + + - + @@ -68930,108 +68850,108 @@ - + - - + + - + - + - + - - + + - - + + - + - - + + - - + + - + - + - + - + - + - - + + - - - + + + - - + + - - + + - - + + - + - + @@ -69040,10 +68960,10 @@ - + - + @@ -69055,22 +68975,22 @@ - + - + - + - + - + - + @@ -69090,7 +69010,7 @@ - + @@ -69102,7 +69022,7 @@ - + @@ -69122,18 +69042,18 @@ - + - + - + - + @@ -69147,60 +69067,60 @@ - + - + - + - - - - - - - - - - + + + + + + + + + + - + - + - - + + - - + + - - + + - + - + - + @@ -69217,7 +69137,7 @@ - + @@ -69230,20 +69150,20 @@ - + - + - + - + @@ -69277,46 +69197,46 @@ - + - - + + - + - - + + - - + + - - + + - - - + + + - + @@ -69330,49 +69250,49 @@ - + - + - + - + - + - + - - + + - + - + - + @@ -69384,23 +69304,23 @@ - + - + - + - + @@ -69409,26 +69329,26 @@ - + - - + + - + - + - + - + @@ -69438,7 +69358,7 @@ - + @@ -69452,7 +69372,7 @@ - + @@ -69466,7 +69386,7 @@ - + @@ -69486,7 +69406,7 @@ - + @@ -69495,54 +69415,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -69559,7 +69479,7 @@ - + @@ -69573,7 +69493,7 @@ - + @@ -69590,7 +69510,7 @@ - + @@ -69604,7 +69524,7 @@ - + @@ -69621,7 +69541,7 @@ - + @@ -69644,7 +69564,7 @@ - + @@ -69670,7 +69590,7 @@ - + @@ -69687,7 +69607,7 @@ - + @@ -69704,7 +69624,7 @@ - + @@ -69721,7 +69641,7 @@ - + @@ -69735,7 +69655,7 @@ - + @@ -69752,7 +69672,7 @@ - + @@ -69781,7 +69701,7 @@ - + @@ -69801,25 +69721,25 @@ - - - - - - + + + + + + + - - - - - - - - + + + - + + + + + - + @@ -69828,7 +69748,7 @@ - + @@ -69839,12 +69759,12 @@ - + - - + + @@ -69861,16 +69781,16 @@ - - - - + + + + - + - + @@ -69882,7 +69802,7 @@ - + @@ -69897,19 +69817,19 @@ - + - + - + - + @@ -69963,10 +69883,10 @@ - + - + @@ -69975,19 +69895,19 @@ - + - + - + - + @@ -70005,7 +69925,7 @@ - + @@ -70016,130 +69936,130 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70154,14 +70074,14 @@ - + - + @@ -70172,28 +70092,28 @@ - + - + - + - + - + - + @@ -70205,13 +70125,13 @@ - + - + - + @@ -70229,40 +70149,40 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -70270,50 +70190,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70321,13 +70241,13 @@ - + - + @@ -70353,13 +70273,13 @@ - + - + @@ -70370,92 +70290,92 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - + + + + + - + - + - + - + @@ -70468,54 +70388,54 @@ - - + + - + - + - - - + + + - + - - + + - - + + - - + + - - + + - - + + - - + + @@ -70523,247 +70443,247 @@ - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - - + - - - + + - - - - - + + - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - - - + + + - + - + - - + + - + - + - + - + - + - + @@ -70778,25 +70698,25 @@ - + - + - + - + - + @@ -70805,16 +70725,16 @@ - + - + - + @@ -70826,7 +70746,7 @@ - + @@ -70838,9 +70758,9 @@ - + - + @@ -70861,10 +70781,10 @@ - + - + @@ -70876,7 +70796,7 @@ - + @@ -70888,12 +70808,12 @@ - + - + @@ -70902,18 +70822,18 @@ - + - + - + - + @@ -70928,7 +70848,7 @@ - + @@ -70936,68 +70856,68 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -71018,18 +70938,18 @@ - + - + - + - + @@ -71049,8 +70969,8 @@ - - + + @@ -71058,7 +70978,7 @@ - + @@ -71072,12 +70992,12 @@ - + - + - + @@ -71086,13 +71006,13 @@ - + - + - + @@ -71101,19 +71021,19 @@ - + - + - + - + @@ -71122,16 +71042,16 @@ - + - + - + @@ -71161,37 +71081,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -71206,13 +71126,13 @@ - + - + - + @@ -71230,52 +71150,52 @@ - + - + - + - + - - - - - + + + + + - + - + - + - + - + - - + + - + - + - + @@ -71316,12 +71236,12 @@ - + - + - + @@ -71330,10 +71250,10 @@ - + - + @@ -71344,14 +71264,14 @@ - + - - + + @@ -71365,70 +71285,70 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + @@ -71436,104 +71356,104 @@ - + - - - + + + - - + + - - + + - - + + - - + + - - - + + + - - - - - - + + + + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - + - + - + @@ -71547,13 +71467,13 @@ - + - + @@ -71565,7 +71485,7 @@ - + @@ -71595,16 +71515,16 @@ - + - + - + @@ -71637,7 +71557,7 @@ - + @@ -71652,56 +71572,56 @@ - + - + - + - + - + - + - + - + - + - + - - + + - - - - - + + + - - - - + + + + + + @@ -71725,14 +71645,14 @@ - - + + - + - - + + @@ -71742,80 +71662,80 @@ - + - - + + - + - + - + - + - + - + - + - - + + - - + + - + - + - - + + - - - + + + - + - + @@ -71826,41 +71746,41 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -71869,7 +71789,7 @@ - + @@ -71883,64 +71803,64 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -71951,15 +71871,15 @@ - + - + - + - + @@ -71968,86 +71888,86 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72056,21 +71976,21 @@ - + - + - + - + @@ -72078,7 +71998,7 @@ - + @@ -72086,21 +72006,21 @@ - + - + - + - + - + @@ -72115,7 +72035,7 @@ - + @@ -72139,10 +72059,10 @@ - + - + @@ -72159,27 +72079,27 @@ - + - + - + - + - + - + - + @@ -72188,7 +72108,7 @@ - + @@ -72197,7 +72117,7 @@ - + @@ -72221,30 +72141,30 @@ - + - + - + - + - + - + - + @@ -72265,7 +72185,7 @@ - + @@ -72319,45 +72239,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72371,33 +72291,33 @@ - + - + - + - + - + - + - + - + - + @@ -72412,7 +72332,7 @@ - + @@ -72420,13 +72340,13 @@ - + - + @@ -72453,48 +72373,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72529,7 +72449,7 @@ - + @@ -72547,7 +72467,7 @@ - + @@ -72567,50 +72487,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72627,372 +72547,372 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - - + + - - + + - - - - - + + + + + - + - - - + + + - + - - + + - + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - - + + - + + - - + + + - - + + - + - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + + - - - + + + - - + + - - + + - - + + - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + - + + + + + + + - - - + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -73005,58 +72925,58 @@ - + - + - + - + - + - + - + - + - + - + - - + + - - + + @@ -73064,11 +72984,11 @@ - + - + @@ -73115,7 +73035,7 @@ - + @@ -73126,97 +73046,97 @@ - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - - + + - + - + - + - + @@ -73230,89 +73150,89 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + @@ -73324,46 +73244,46 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -73383,30 +73303,30 @@ - + - + - + - + - + - + - + - + - + @@ -73414,16 +73334,16 @@ - + - + - + @@ -73434,7 +73354,7 @@ - + @@ -73445,94 +73365,94 @@ - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - + - - - + + + - - - + + + - + - - + + - - + + - - + + - - + + @@ -73548,78 +73468,78 @@ - - + + - + - - - + + + - + - - - + + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + @@ -73629,30 +73549,30 @@ - - - + + + - + - - + + - + - + - + @@ -73660,25 +73580,25 @@ - + - + - + - + - + - + @@ -73687,7 +73607,7 @@ - + @@ -73699,13 +73619,13 @@ - + - + @@ -73719,43 +73639,43 @@ - + - + - + - + - + - + - + - + - + @@ -73775,34 +73695,34 @@ - + - + - + - + - + - + - + - + @@ -73814,7 +73734,7 @@ - + @@ -73832,13 +73752,13 @@ - + - + @@ -73864,16 +73784,16 @@ - + - + - + - + @@ -73927,7 +73847,7 @@ - + @@ -73938,7 +73858,7 @@ - + @@ -73982,27 +73902,27 @@ - + - + - + - + - + - + - + - + @@ -74068,7 +73988,7 @@ - + @@ -74094,7 +74014,7 @@ - + @@ -74138,7 +74058,7 @@ - + @@ -74167,13 +74087,13 @@ - + - + - + @@ -74181,90 +74101,90 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -74284,7 +74204,7 @@ - + @@ -74304,7 +74224,7 @@ - + @@ -74330,10 +74250,10 @@ - + - + @@ -74347,13 +74267,13 @@ - + - + - + @@ -74361,7 +74281,7 @@ - + @@ -74375,15 +74295,15 @@ - + - + - + @@ -74391,104 +74311,104 @@ - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - + + + - - + + - - + + - - + + - + - + - + - + - + - + - - + + - + - + @@ -74497,53 +74417,53 @@ - + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -74553,13 +74473,13 @@ - + - + - + @@ -74568,40 +74488,40 @@ - + - + - + - + - + - + - + - + - + @@ -74619,7 +74539,7 @@ - + @@ -74627,7 +74547,7 @@ - + @@ -74638,14 +74558,14 @@ - + - + @@ -74661,7 +74581,7 @@ - + @@ -74674,7 +74594,7 @@ - + @@ -74685,35 +74605,35 @@ - + - + - + - + - + - + @@ -74725,16 +74645,16 @@ - + - + - + - + @@ -74746,7 +74666,7 @@ - + @@ -74765,14 +74685,14 @@ - + - + @@ -74783,7 +74703,7 @@ - + @@ -74796,29 +74716,29 @@ - + - + - + - + - + - + - + - + - + @@ -74827,9 +74747,9 @@ - + - + @@ -74844,10 +74764,10 @@ - + - + @@ -74864,17 +74784,17 @@ - + - + - + - + - + @@ -74886,9 +74806,9 @@ - + - + @@ -74903,13 +74823,13 @@ - + - + @@ -74921,9 +74841,9 @@ - + - + @@ -74932,16 +74852,16 @@ - + - + - + - + @@ -74956,18 +74876,18 @@ - + - + - + @@ -74975,7 +74895,7 @@ - + @@ -74983,9 +74903,16 @@ - - - + + + + + + + + + + @@ -74997,29 +74924,29 @@ - + - + - + - + - + @@ -75055,13 +74982,13 @@ - - - - - + + + + + - + @@ -75070,11 +74997,11 @@ - + - + @@ -75095,15 +75022,15 @@ - - + + - + @@ -75196,7 +75123,7 @@ - + @@ -75229,15 +75156,15 @@ - + - - - + + + @@ -75248,13 +75175,13 @@ - + - + - + @@ -75287,7 +75214,7 @@ - + @@ -75296,7 +75223,7 @@ - + @@ -75307,97 +75234,97 @@ - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - + @@ -75435,16 +75362,16 @@ - + - - + + - + @@ -75470,9 +75397,9 @@ - + - + @@ -75490,7 +75417,7 @@ - + @@ -75499,7 +75426,7 @@ - + @@ -75523,10 +75450,10 @@ - + - + @@ -75535,18 +75462,18 @@ - + - + - + - + - + @@ -75555,15 +75482,15 @@ - + - + - + @@ -75572,7 +75499,7 @@ - + @@ -75582,7 +75509,7 @@ - + @@ -75590,13 +75517,13 @@ - + - + @@ -75607,13 +75534,13 @@ - + - + - + @@ -75630,16 +75557,16 @@ - + - + - + @@ -75649,7 +75576,7 @@ - + @@ -75660,27 +75587,27 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + @@ -75690,15 +75617,15 @@ - + - + - + @@ -75711,7 +75638,7 @@ - + @@ -75722,12 +75649,12 @@ - + - + @@ -75735,11 +75662,11 @@ - + - + @@ -75747,7 +75674,7 @@ - + @@ -75757,26 +75684,26 @@ - - + + - + - + - + - + @@ -75788,12 +75715,12 @@ - + - + @@ -75804,7 +75731,7 @@ - + @@ -75865,28 +75792,28 @@ - - - + + + - - - + + + - - + + - + - + - - + + @@ -75906,7 +75833,7 @@ - + @@ -75932,12 +75859,12 @@ - + - + @@ -75955,7 +75882,7 @@ - + @@ -75970,27 +75897,27 @@ - - - + + + - + - + - + - - + + @@ -76029,31 +75956,31 @@ - + - + - + - + - + - + @@ -76084,13 +76011,13 @@ + + + + + + - - - - - - @@ -76101,45 +76028,45 @@ - + - + - + - + - + - + - + - + - + @@ -76150,10 +76077,10 @@ - + - + @@ -76171,15 +76098,15 @@ - + - + - + @@ -76194,9 +76121,9 @@ - - - + + + @@ -76210,14 +76137,14 @@ - + - + - + @@ -76226,7 +76153,7 @@ - + @@ -76275,20 +76202,20 @@ - + - + - + - + - + @@ -76332,11 +76259,11 @@ - - + + - + @@ -76347,8 +76274,8 @@ - - + + @@ -76360,24 +76287,16 @@ - + - - - - - - - - - + - + @@ -76385,7 +76304,7 @@ - + @@ -76476,7 +76395,7 @@ - + @@ -76489,7 +76408,7 @@ - + @@ -76497,32 +76416,32 @@ - + - + - + - + - + - + @@ -76535,26 +76454,26 @@ - + - + - - - + + + - + - + - + @@ -76566,16 +76485,16 @@ - - + + - + - + @@ -76583,10 +76502,10 @@ - + - + @@ -76594,23 +76513,23 @@ - + - + - + - + - + - + @@ -76624,7 +76543,7 @@ - + @@ -76644,25 +76563,25 @@ - - + + - - - - - - - - - - - + + + + + + + + + + + - + @@ -76671,7 +76590,7 @@ - + @@ -76731,18 +76650,18 @@ - + - + - + - + @@ -76752,43 +76671,43 @@ - + - + - + - + - + - + - + - + - + @@ -76813,14 +76732,14 @@ - - - - + + + + - + - + @@ -76833,7 +76752,7 @@ - + @@ -76844,7 +76763,7 @@ - + @@ -76855,7 +76774,7 @@ - + @@ -76863,7 +76782,7 @@ - + @@ -76873,13 +76792,13 @@ - + - + @@ -76893,15 +76812,15 @@ - + - + - + @@ -76912,16 +76831,16 @@ - - - + + + - + - + @@ -76933,7 +76852,7 @@ - + @@ -76945,30 +76864,30 @@ - + - + - + - - - + + + - + - + - + @@ -76976,16 +76895,16 @@ - + - + - + @@ -77024,7 +76943,7 @@ - + @@ -77032,9 +76951,9 @@ - + - + @@ -77051,10 +76970,10 @@ - + - + @@ -77064,7 +76983,7 @@ - + @@ -77076,7 +76995,7 @@ - + @@ -77086,8 +77005,8 @@ - - + + @@ -77095,10 +77014,10 @@ - + - + @@ -77107,13 +77026,13 @@ - + - + @@ -77136,19 +77055,19 @@ - + - + - + - + @@ -77156,8 +77075,8 @@ - - + + @@ -77189,10 +77108,10 @@ - + - + @@ -77203,13 +77122,13 @@ - + - + - + @@ -77218,32 +77137,32 @@ - + - + - + - + - + - + - + @@ -77260,32 +77179,32 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + @@ -77340,16 +77259,16 @@ - + - + - + @@ -77357,11 +77276,11 @@ - + - + @@ -77378,14 +77297,14 @@ - + - + @@ -77440,13 +77359,13 @@ - + - + @@ -77463,7 +77382,7 @@ - + @@ -77474,7 +77393,7 @@ - + @@ -77489,7 +77408,7 @@ - + @@ -77500,19 +77419,19 @@ - - - + + + - - + + - + - + @@ -77533,7 +77452,7 @@ - + @@ -77571,9 +77490,9 @@ - - - + + + @@ -77585,16 +77504,16 @@ - - + + - + - + @@ -77637,13 +77556,13 @@ - + - + @@ -77702,26 +77621,26 @@ - - - - + + + + - + - + - - + + - + - - - - + + + + @@ -77733,8 +77652,8 @@ - - + + @@ -77789,20 +77708,20 @@ - - + + - + - + - + - + @@ -77814,7 +77733,7 @@ - + @@ -77822,27 +77741,27 @@ - + - + - + - + - + - + @@ -77857,7 +77776,7 @@ - + @@ -77867,18 +77786,18 @@ + + + + + + + + + + - - - - - - - - - - - + @@ -77890,27 +77809,27 @@ - - + + - + - + - - + + - + - + @@ -77920,23 +77839,23 @@ - - + + - + - - + + - + @@ -77944,10 +77863,10 @@ - + + - @@ -77978,41 +77897,41 @@ - + - + - - - + + + - + - + - - - + + + - - + + - - - + + + - + - + - + - + @@ -78029,7 +77948,7 @@ - + @@ -78050,7 +77969,7 @@ - + @@ -78067,11 +77986,11 @@ - + - - + + @@ -78081,7 +78000,7 @@ - + @@ -78097,42 +78016,42 @@ - - - - - + + + + + - - + + - + - + - - + + - + - + - + - + - + - + @@ -78141,7 +78060,7 @@ - + @@ -78153,11 +78072,11 @@ - + - + @@ -78165,13 +78084,13 @@ - + - + @@ -78189,7 +78108,7 @@ - + @@ -78200,7 +78119,7 @@ - + @@ -78208,13 +78127,13 @@ - + - + @@ -78222,10 +78141,10 @@ - + - + @@ -78239,15 +78158,15 @@ - - - - - - + + + + + + - + @@ -78257,15 +78176,15 @@ - + - - + + - + @@ -78280,30 +78199,30 @@ - + - + - + - + - + - + @@ -78466,14 +78385,14 @@ - - + + - + - + @@ -78482,7 +78401,7 @@ - + @@ -78515,37 +78434,37 @@ - + - + - + - - + + - + - + - + @@ -78558,7 +78477,7 @@ - + @@ -78571,18 +78490,18 @@ - - + + - + - - + + @@ -78663,7 +78582,7 @@ - + @@ -78674,7 +78593,7 @@ - + @@ -78683,20 +78602,20 @@ - - - + + + - + - + - + @@ -78705,27 +78624,27 @@ - + - + - + - + - + @@ -78753,7 +78672,7 @@ - + @@ -78776,7 +78695,7 @@ - + @@ -78791,7 +78710,7 @@ - + @@ -78830,43 +78749,43 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -78874,34 +78793,34 @@ - + - + - + - + - - - - - + + + + + - - - - - - - - + + + + + + + + @@ -78909,7 +78828,7 @@ - + @@ -78921,7 +78840,7 @@ - + @@ -78930,31 +78849,31 @@ - - - + + + - - + + - + - + - - - + + + - + - + @@ -78977,7 +78896,7 @@ - + @@ -78989,7 +78908,7 @@ - + @@ -79012,7 +78931,7 @@ - + @@ -79155,7 +79074,7 @@ - + @@ -79170,13 +79089,13 @@ - + - + @@ -79191,16 +79110,16 @@ - + - + - - + + @@ -79250,43 +79169,43 @@ - + - + - + - + - + - + - + - + - + @@ -79301,7 +79220,7 @@ - + @@ -79311,15 +79230,15 @@ - + - + - + @@ -79340,7 +79259,7 @@ - + @@ -79386,7 +79305,7 @@ - + @@ -79394,13 +79313,13 @@ - + - + @@ -79414,9 +79333,9 @@ - + - + @@ -79428,8 +79347,8 @@ - - + + @@ -79450,7 +79369,7 @@ - + @@ -79487,7 +79406,7 @@ - + @@ -79496,26 +79415,26 @@ - + - + - + - + - + @@ -79528,13 +79447,13 @@ - + - + @@ -79543,60 +79462,60 @@ - + - + - - + + - - + + - + - + - + - + - + - + - + - + @@ -79616,49 +79535,49 @@ - - + + - + - + - + - + - + - + - + - + - + - + @@ -79669,7 +79588,7 @@ - + @@ -79677,9 +79596,9 @@ - - - + + + @@ -79702,15 +79621,15 @@ - + - - + + - + @@ -79727,7 +79646,7 @@ - + @@ -79737,7 +79656,7 @@ - + @@ -79746,7 +79665,7 @@ - + @@ -79767,17 +79686,17 @@ - + - + - + @@ -79801,8 +79720,8 @@ - - + + @@ -79821,8 +79740,8 @@ - - + + @@ -79834,12 +79753,12 @@ - + - + @@ -79849,7 +79768,7 @@ - + @@ -79898,7 +79817,7 @@ - + @@ -79957,7 +79876,7 @@ - + @@ -79968,7 +79887,7 @@ - + @@ -79977,22 +79896,22 @@ - + - + - + - + @@ -80021,7 +79940,7 @@ - + @@ -80037,10 +79956,10 @@ - + - + @@ -80074,7 +79993,7 @@ - + @@ -80087,14 +80006,14 @@ - + - + @@ -80127,7 +80046,7 @@ - + @@ -80155,12 +80074,12 @@ - + - + @@ -80192,28 +80111,28 @@ - - - - - - - + + + + + + + - + - + - + - + @@ -80223,12 +80142,12 @@ - + - + @@ -80248,7 +80167,7 @@ - + @@ -80293,7 +80212,7 @@ - + @@ -80301,225 +80220,225 @@ - - + + - - + + - + - - + + - + - + - - + + - - + + - + - + - + - + - + - + - - + + - - + + - + - - + + - + - + - - + + - + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - + + - + - + - + - + @@ -80527,121 +80446,121 @@ - + - + - + - + - - + + - + - - + + - + - - + + - + - + - + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - + + - + - - + + - + @@ -80649,145 +80568,145 @@ - + - + - - + + - - + + - + - + - - + + - + - + - + - - + + - + - - + + - - + + - + - + - + - + - + - - + + - + - - + + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + @@ -80816,19 +80735,19 @@ - + - + - + @@ -80842,9 +80761,9 @@ - + - + @@ -80868,10 +80787,10 @@ - + - + @@ -80895,13 +80814,13 @@ - + - + @@ -80922,13 +80841,13 @@ - + - + - + @@ -80937,10 +80856,10 @@ - + - + @@ -80957,7 +80876,7 @@ - + @@ -80984,7 +80903,7 @@ - + @@ -81014,7 +80933,7 @@ - + @@ -81023,13 +80942,13 @@ - + - + @@ -81047,25 +80966,25 @@ - + - + - + - + - + - + @@ -81080,19 +80999,19 @@ - + - + - + - + @@ -81125,10 +81044,10 @@ - + - + @@ -81178,19 +81097,19 @@ - + - + - + - + @@ -81261,7 +81180,7 @@ - + @@ -81281,10 +81200,10 @@ - + - + @@ -81305,7 +81224,7 @@ - + @@ -81317,13 +81236,13 @@ - + - + @@ -81361,13 +81280,13 @@ - + - + - + @@ -81382,7 +81301,7 @@ - + @@ -81394,13 +81313,13 @@ - + - + @@ -81415,24 +81334,24 @@ - + - + - + - + - + @@ -81447,16 +81366,16 @@ - + - + - + - + @@ -81467,22 +81386,22 @@ - + - + - + - + - + @@ -81493,7 +81412,7 @@ - + @@ -81504,40 +81423,40 @@ - + - + - + - + - + - + - - + + - + - + - + - + @@ -81549,13 +81468,13 @@ - + - + @@ -81564,10 +81483,10 @@ - + - + @@ -81591,18 +81510,18 @@ - + - + - + - + @@ -81616,8 +81535,8 @@ - - + + @@ -81631,31 +81550,31 @@ - + - + - + - + - + - + - + - + @@ -81667,15 +81586,15 @@ - + - + - + @@ -81683,7 +81602,7 @@ - + @@ -81691,7 +81610,7 @@ - + @@ -81726,22 +81645,22 @@ - + - + - + - + @@ -81759,7 +81678,7 @@ - + @@ -81771,10 +81690,10 @@ - + - + @@ -81792,7 +81711,7 @@ - + @@ -81813,7 +81732,7 @@ - + @@ -81846,19 +81765,19 @@ - + - + - + - + @@ -81870,25 +81789,25 @@ - + - + - + - + - + @@ -81897,7 +81816,7 @@ - + @@ -81926,7 +81845,7 @@ - + @@ -81941,81 +81860,81 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -82045,9 +81964,9 @@ - + - + @@ -82059,10 +81978,10 @@ - + - + @@ -82107,7 +82026,7 @@ - + @@ -82125,7 +82044,7 @@ - + @@ -82133,7 +82052,7 @@ - + @@ -82162,7 +82081,7 @@ - + @@ -82171,10 +82090,10 @@ - + - + @@ -82222,10 +82141,10 @@ - + - + @@ -82249,7 +82168,7 @@ - + @@ -82288,7 +82207,7 @@ - + @@ -82318,18 +82237,18 @@ - + - + - + - + @@ -82337,7 +82256,7 @@ - + @@ -82354,12 +82273,12 @@ - + - + - + @@ -82389,15 +82308,15 @@ - + - + - + - + @@ -82436,10 +82355,10 @@ - + - + @@ -82454,34 +82373,34 @@ - + - + - + - + - + - + - + - + @@ -82499,22 +82418,22 @@ - + - + - + - + - + @@ -82525,7 +82444,7 @@ - + @@ -82536,7 +82455,7 @@ - + @@ -82554,36 +82473,36 @@ - + - + - + - + - + - + - + - + - + @@ -82594,15 +82513,15 @@ - + - + - + @@ -82614,10 +82533,10 @@ - + - + @@ -82626,7 +82545,7 @@ - + @@ -82635,7 +82554,7 @@ - + @@ -82644,7 +82563,7 @@ - + @@ -82653,24 +82572,24 @@ - + - + - + - + @@ -82690,7 +82609,7 @@ - + @@ -82698,7 +82617,7 @@ - + @@ -82707,8 +82626,8 @@ - - + + @@ -82716,18 +82635,18 @@ - + - + - + - + - + @@ -82736,7 +82655,7 @@ - + @@ -82750,60 +82669,60 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -82830,7 +82749,7 @@ - + @@ -82839,16 +82758,16 @@ - + - + - + @@ -82865,13 +82784,13 @@ - + - + @@ -82880,10 +82799,10 @@ - + - + @@ -82898,10 +82817,10 @@ - + - + @@ -82910,8 +82829,8 @@ - - + + @@ -82922,10 +82841,10 @@ - - + + - + @@ -82934,7 +82853,7 @@ - + @@ -82946,7 +82865,7 @@ - + @@ -82964,15 +82883,15 @@ - + - + - + @@ -82980,12 +82899,12 @@ - + - + @@ -83025,7 +82944,7 @@ - + @@ -83168,7 +83087,7 @@ - + @@ -83183,7 +83102,7 @@ - + @@ -83215,7 +83134,7 @@ - + @@ -83251,24 +83170,24 @@ - + - + - + - + - + - + @@ -83298,35 +83217,35 @@ - + - + - + - + - + - + - + - + - + @@ -83337,67 +83256,67 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -83409,7 +83328,7 @@ - + @@ -83423,13 +83342,13 @@ - + - + - + @@ -83438,8 +83357,8 @@ - - + + @@ -83447,34 +83366,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -83492,9 +83411,9 @@ - + - + @@ -83515,17 +83434,17 @@ - + - + - + - + - + @@ -83537,9 +83456,9 @@ - + - + @@ -83551,7 +83470,7 @@ - + @@ -83580,10 +83499,10 @@ - + - + @@ -83607,16 +83526,16 @@ - + - + - + - + @@ -83627,7 +83546,7 @@ - + @@ -83638,10 +83557,10 @@ - + - + @@ -83660,18 +83579,18 @@ - + - + - + - + @@ -83679,7 +83598,7 @@ - + @@ -83690,20 +83609,20 @@ - + - + - + - + - + @@ -83712,7 +83631,7 @@ - + @@ -83723,15 +83642,15 @@ - + - + - + - + @@ -83776,28 +83695,28 @@ - + - + - + - + - + - + - + - + @@ -83839,10 +83758,10 @@ - + - + @@ -83851,9 +83770,9 @@ - + - + @@ -83862,7 +83781,7 @@ - + @@ -83871,7 +83790,7 @@ - + @@ -83897,7 +83816,7 @@ - + @@ -83905,7 +83824,7 @@ - + @@ -83916,28 +83835,28 @@ - + - + - + - - - + + + - + @@ -83946,13 +83865,13 @@ - + - + @@ -83975,16 +83894,16 @@ - + - + - + - + @@ -84013,22 +83932,22 @@ - + - + - + - + - + @@ -84051,7 +83970,7 @@ - + @@ -84065,7 +83984,7 @@ - + @@ -84080,19 +83999,19 @@ - + - + - - + + @@ -84100,10 +84019,10 @@ - + - + @@ -84120,15 +84039,15 @@ - + - + - + @@ -84137,27 +84056,27 @@ - + - + - + - + - + - + - + - + @@ -84195,7 +84114,7 @@ - + @@ -84210,13 +84129,13 @@ - + - + - + @@ -84225,13 +84144,13 @@ - + - + - + @@ -84243,40 +84162,40 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -84285,27 +84204,27 @@ - + - + - + - + - + - + @@ -84314,102 +84233,102 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -84417,20 +84336,20 @@ - + - + - + - + @@ -84439,36 +84358,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -84477,16 +84396,16 @@ - + - + - + @@ -84495,37 +84414,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -84546,7 +84465,7 @@ - + @@ -84732,10 +84651,10 @@ - + - + @@ -84744,7 +84663,7 @@ - + @@ -84753,10 +84672,10 @@ - + - + @@ -84789,7 +84708,7 @@ - + @@ -84804,13 +84723,13 @@ - + - + @@ -84819,10 +84738,10 @@ - + - + @@ -84836,7 +84755,7 @@ - + @@ -84845,7 +84764,7 @@ - + @@ -84854,15 +84773,15 @@ - + - + - + @@ -84874,7 +84793,7 @@ - + @@ -84883,12 +84802,12 @@ - + - + - + @@ -84924,26 +84843,26 @@ - + - + - + - + - + - + - + @@ -84964,12 +84883,12 @@ - + - + - + @@ -84981,23 +84900,23 @@ - + - + - + - + - + @@ -85020,29 +84939,29 @@ - + - + - + - - - - + + + + - + - + - + @@ -85051,7 +84970,7 @@ - + @@ -85069,7 +84988,7 @@ - + @@ -85080,85 +84999,85 @@ - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85179,19 +85098,19 @@ - + - + - + - + - + @@ -85212,36 +85131,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -85337,7 +85256,7 @@ - + @@ -85345,55 +85264,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85407,7 +85326,7 @@ - + @@ -85418,27 +85337,27 @@ - + - + - + - + - + - + - + - + @@ -85447,9 +85366,9 @@ - + - + @@ -85458,7 +85377,7 @@ - + @@ -85475,7 +85394,7 @@ - + @@ -85496,46 +85415,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85573,40 +85492,40 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -85618,43 +85537,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -85668,18 +85587,18 @@ - + - + - + - + @@ -85694,25 +85613,25 @@ - + - + - + - + - + @@ -85736,13 +85655,13 @@ - + - + - + @@ -85754,9 +85673,9 @@ - + - + @@ -85774,7 +85693,7 @@ - + @@ -85794,7 +85713,7 @@ - + @@ -85802,7 +85721,7 @@ - + @@ -85810,7 +85729,7 @@ - + @@ -85819,7 +85738,7 @@ - + @@ -85827,7 +85746,7 @@ - + @@ -85853,31 +85772,31 @@ - + - + - + - + - + - + @@ -85889,16 +85808,16 @@ - + - + - + - + @@ -85912,7 +85831,7 @@ - + @@ -85921,13 +85840,13 @@ - + - + - + @@ -85945,25 +85864,25 @@ - + - + - + - + - + @@ -85971,13 +85890,13 @@ - + - + - + @@ -86006,41 +85925,41 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -86049,83 +85968,83 @@ - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -86134,13 +86053,13 @@ - + - + @@ -86191,7 +86110,7 @@ - + @@ -86203,7 +86122,7 @@ - + @@ -86218,7 +86137,7 @@ - + @@ -86239,7 +86158,7 @@ - + @@ -86266,7 +86185,7 @@ - + @@ -86281,13 +86200,13 @@ - + - + @@ -86299,13 +86218,13 @@ - + - + @@ -86322,19 +86241,19 @@ - + - + - + - + - + @@ -86345,16 +86264,16 @@ - + - + - + @@ -86378,13 +86297,13 @@ - + - + @@ -86408,7 +86327,7 @@ - + @@ -86426,16 +86345,16 @@ - - + + - + - + @@ -86446,17 +86365,17 @@ - + - + - + - + @@ -86471,15 +86390,15 @@ - + - + - + @@ -86488,7 +86407,7 @@ - + @@ -86503,101 +86422,101 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + @@ -86615,7 +86534,7 @@ - + @@ -86626,13 +86545,13 @@ - + - + - + @@ -86641,19 +86560,19 @@ - + - + - + - + @@ -86677,9 +86596,9 @@ - + - + @@ -86688,13 +86607,13 @@ - + - + @@ -86706,15 +86625,15 @@ - + - + - + @@ -86722,7 +86641,7 @@ - + @@ -86731,17 +86650,17 @@ - + - + - + - + - + @@ -86824,16 +86743,16 @@ - + - + - + @@ -86844,24 +86763,24 @@ - + - + - + - + - + - + - + @@ -86962,7 +86881,7 @@ - + @@ -86970,16 +86889,16 @@ - + - + - + @@ -86988,8 +86907,8 @@ - - + + @@ -87006,19 +86925,19 @@ - + - + - - - - + + + + @@ -87041,11 +86960,11 @@ - + - - + + @@ -87059,29 +86978,29 @@ - - + + - + - + - + - + - + - + @@ -87099,10 +87018,10 @@ - + - + @@ -87110,34 +87029,34 @@ - + - + - - - + + + - + - + - + - + - + - + - + @@ -87149,7 +87068,7 @@ - + @@ -87170,22 +87089,22 @@ - + - + - + - + - + @@ -87200,7 +87119,7 @@ - + @@ -87209,25 +87128,25 @@ - + - + - + - + - + - + - + @@ -87242,7 +87161,7 @@ - + @@ -87254,10 +87173,10 @@ - + - + @@ -87266,10 +87185,10 @@ - + - + @@ -87277,7 +87196,7 @@ - + @@ -87291,7 +87210,7 @@ - + @@ -87318,7 +87237,7 @@ - + @@ -87344,15 +87263,15 @@ - + - + - + - + @@ -87360,48 +87279,48 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -87416,9 +87335,9 @@ - + - + @@ -87427,7 +87346,7 @@ - + @@ -87438,10 +87357,10 @@ - + - + @@ -87449,27 +87368,27 @@ - + - + - + - + - + - + - + - + @@ -87484,15 +87403,15 @@ - + - + - + - + @@ -87501,10 +87420,10 @@ - + - + @@ -87512,12 +87431,12 @@ - + - + - + @@ -87550,7 +87469,7 @@ - + @@ -87559,7 +87478,7 @@ - + @@ -87571,30 +87490,30 @@ - + - + - + - + - + - + - + @@ -87603,13 +87522,13 @@ - + - + - + @@ -87639,10 +87558,10 @@ - + - + @@ -87651,7 +87570,7 @@ - + @@ -87684,13 +87603,13 @@ - + - + - + @@ -87705,18 +87624,18 @@ - + - + - + - + @@ -87727,64 +87646,64 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -87792,7 +87711,7 @@ - + @@ -87801,16 +87720,16 @@ - - + + - + - + - + @@ -87821,7 +87740,7 @@ - + @@ -87838,7 +87757,7 @@ - + @@ -87863,7 +87782,7 @@ - + @@ -87995,7 +87914,7 @@ - + @@ -88003,9 +87922,9 @@ - + - + @@ -88020,7 +87939,7 @@ - + @@ -88029,7 +87948,7 @@ - + @@ -88044,23 +87963,23 @@ - + - + - + - + @@ -88070,9 +87989,9 @@ - + - + @@ -88080,7 +87999,7 @@ - + @@ -88099,10 +88018,10 @@ - + - + @@ -88128,13 +88047,13 @@ - + - + - + @@ -88148,7 +88067,7 @@ - + @@ -88156,10 +88075,10 @@ - + - + @@ -88176,7 +88095,7 @@ - + @@ -88187,7 +88106,7 @@ - + @@ -88195,16 +88114,16 @@ - - + + - + - + @@ -88216,7 +88135,7 @@ - + @@ -88225,7 +88144,7 @@ - + @@ -88237,19 +88156,19 @@ - + - + - + - + - + @@ -88258,20 +88177,20 @@ - + - + - + - + - + @@ -88280,24 +88199,24 @@ - + - + - - + + - + - + @@ -88326,15 +88245,15 @@ - + - + - + @@ -88363,7 +88282,7 @@ - + @@ -88371,7 +88290,7 @@ - + @@ -88379,7 +88298,7 @@ - + @@ -88387,21 +88306,21 @@ - + - + - + - + @@ -88415,9 +88334,9 @@ - + - + @@ -88430,13 +88349,13 @@ - - + + - + @@ -88453,17 +88372,17 @@ - + - + - + @@ -88540,7 +88459,7 @@ - + @@ -88585,10 +88504,10 @@ - + - + @@ -88609,16 +88528,16 @@ - + - + - + - + @@ -88632,7 +88551,7 @@ - + @@ -88680,7 +88599,7 @@ - + @@ -88688,14 +88607,14 @@ - + - + @@ -88706,35 +88625,35 @@ - + - + - + - + - + - + - + - + - + - + @@ -88746,13 +88665,13 @@ - + - + - + @@ -88769,7 +88688,7 @@ - + @@ -88778,22 +88697,22 @@ - + - + - + - + @@ -88801,18 +88720,18 @@ - + - + - + - + @@ -88820,18 +88739,18 @@ - + - + - + @@ -88841,26 +88760,26 @@ - + - + - + - + - + - + @@ -88872,63 +88791,63 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -88949,7 +88868,7 @@ - + @@ -88957,12 +88876,12 @@ - + - + @@ -88973,7 +88892,7 @@ - + @@ -89001,68 +88920,68 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -89070,10 +88989,10 @@ - + - + @@ -89084,7 +89003,7 @@ - + @@ -89101,7 +89020,7 @@ - + @@ -89118,13 +89037,13 @@ - + - + - + @@ -89136,16 +89055,16 @@ - + - + - + - + @@ -89160,9 +89079,9 @@ - + - + @@ -89171,7 +89090,7 @@ - + @@ -89184,424 +89103,424 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + @@ -89619,136 +89538,136 @@ - - - + + + - + - + - + - + - + - + - - - + + + - - - + + + - - + + - + - - + + - - + + - + - + - + - + - - + + - - + + - + - + - + - + - + - - + + - - - + + + - - - + + + - - + + - + - + - + - + @@ -89756,63 +89675,63 @@ - + - + - + - - + + - - - + + + - - + + - - + + - - - + + + - - + + - + - + - + - + @@ -89820,7 +89739,7 @@ - + @@ -89829,17 +89748,17 @@ - + - + - + @@ -89848,202 +89767,202 @@ - - + + - + - + - + - + - - + + - + - + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - - + + - + - + - - + + - - - + + + - - - + + + - + - - + + - - + + - - + + - + - - + + - + - + - + - - + + - - + + - + - + - + - - + + - + @@ -90052,7 +89971,7 @@ - + @@ -90060,151 +89979,151 @@ - - - + + + - + - - + + - - + + - + - + - - - + + + - + - - + + - - + + - + - - + + - + - + - + - - + + - - + + - - + + - + - - + + - - + + - - + + - + - - + + - - - + + + - - - + + + - + - + - + - + @@ -90212,19 +90131,19 @@ - + - + - + @@ -90232,12 +90151,12 @@ - + - + @@ -90245,192 +90164,192 @@ - + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - - + + - - + + - - + + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + @@ -90438,19 +90357,19 @@ - - + + - + - + @@ -90458,7 +90377,7 @@ - + @@ -90466,7 +90385,7 @@ - + @@ -90474,10 +90393,10 @@ - + - + @@ -90504,7 +90423,7 @@ - + @@ -90522,8 +90441,8 @@ - - + + @@ -90534,29 +90453,29 @@ - - + + - + - + - - + + - + @@ -90567,10 +90486,10 @@ - + - + @@ -90592,7 +90511,7 @@ - + @@ -90604,8 +90523,8 @@ - - + + @@ -90616,7 +90535,7 @@ - + @@ -90629,7 +90548,7 @@ - + @@ -90637,12 +90556,12 @@ - - + + - + - + @@ -90658,11 +90577,11 @@ - + - + @@ -90683,8 +90602,8 @@ - - + + @@ -90700,7 +90619,7 @@ - + @@ -90723,28 +90642,28 @@ - + - + - + - + - + - + - + @@ -90759,9 +90678,9 @@ - + - + @@ -90785,7 +90704,7 @@ - + @@ -90796,7 +90715,7 @@ - + @@ -90808,13 +90727,13 @@ - + - + @@ -90825,68 +90744,68 @@ - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - + - - + + - + - + - + - + - - + + - + - + - + @@ -90894,13 +90813,13 @@ - + - + - + @@ -90908,10 +90827,10 @@ - + - + @@ -90920,12 +90839,12 @@ - + - + @@ -90933,69 +90852,69 @@ - - - - - - - + + + + + + + - + - + - + - - - + + + - + - + - + - - + + - + - + - + - + - + - + - - + + @@ -91006,23 +90925,23 @@ - + - + - - + + - - + + @@ -91034,7 +90953,7 @@ - + @@ -91060,18 +90979,18 @@ - + - + - + - + @@ -91086,9 +91005,9 @@ - + - + @@ -91100,37 +91019,37 @@ - - - - + + + + - - + + - + - - + + - + - + - + - + @@ -91148,7 +91067,7 @@ - + @@ -91163,36 +91082,36 @@ - + - + - + - + - + - + - + - + @@ -91209,7 +91128,7 @@ - + @@ -91220,42 +91139,42 @@ - - - + + + - - - - - + + + + + - + - - + + - - + + - + - + - - + + - - + + @@ -91283,7 +91202,7 @@ - + @@ -91293,7 +91212,7 @@ - + @@ -91304,7 +91223,7 @@ - + @@ -91316,7 +91235,7 @@ - + @@ -91330,7 +91249,7 @@ - + @@ -91345,7 +91264,7 @@ - + @@ -91363,7 +91282,7 @@ - + @@ -91391,13 +91310,13 @@ - - + + - - + + @@ -91405,7 +91324,7 @@ - + @@ -91416,12 +91335,12 @@ - + - - + + @@ -91442,14 +91361,14 @@ - + - + @@ -91466,7 +91385,7 @@ - + @@ -91487,19 +91406,19 @@ - - + + - - + + - + - + @@ -91510,9 +91429,9 @@ - + - + @@ -91521,7 +91440,7 @@ - + @@ -91530,7 +91449,7 @@ - + @@ -91548,7 +91467,7 @@ - + @@ -91557,7 +91476,7 @@ - + @@ -91565,9 +91484,9 @@ - + - + @@ -91582,7 +91501,7 @@ - + @@ -91606,7 +91525,7 @@ - + @@ -91644,10 +91563,10 @@ - + - + @@ -91659,7 +91578,7 @@ - + @@ -91674,7 +91593,7 @@ - + @@ -91685,7 +91604,7 @@ - + @@ -91693,12 +91612,12 @@ - - - - - - + + + + + + @@ -91799,7 +91718,7 @@ - + @@ -91911,25 +91830,25 @@ - + - + - + - + @@ -91981,32 +91900,32 @@ - + - + - + - + - + - + @@ -92014,12 +91933,12 @@ - + - + @@ -92046,7 +91965,7 @@ - + @@ -92093,7 +92012,7 @@ - + @@ -92106,12 +92025,12 @@ - + - + @@ -92119,7 +92038,7 @@ - + @@ -92141,35 +92060,35 @@ - - + + - + - + - + - + - + - - - + + + @@ -92194,19 +92113,19 @@ - + - + - + @@ -92214,14 +92133,14 @@ - + - + @@ -92307,16 +92226,16 @@ - + - + - + @@ -92328,10 +92247,10 @@ - + - + @@ -92376,17 +92295,17 @@ - + - + - + @@ -92397,18 +92316,18 @@ - + - + - + - + - + @@ -92425,19 +92344,19 @@ - + - + - + - + - + @@ -92445,36 +92364,36 @@ - - + + - - + + - - - + + + - + - + - - + + - + @@ -92500,27 +92419,27 @@ - + - + - + - + - + @@ -92531,7 +92450,7 @@ - + @@ -92567,7 +92486,7 @@ - + @@ -92581,8 +92500,8 @@ - - + + @@ -92602,7 +92521,7 @@ - + @@ -92613,27 +92532,27 @@ - - + + - + - + - + - - + + - + @@ -92655,7 +92574,7 @@ - + @@ -92684,7 +92603,7 @@ - + @@ -92699,7 +92618,7 @@ - + @@ -92718,7 +92637,7 @@ - + @@ -92764,8 +92683,8 @@ - - + + @@ -92773,30 +92692,30 @@ - + - + - - - - + + + + - + - + - + @@ -92833,15 +92752,15 @@ - + - + - + @@ -92855,7 +92774,7 @@ - + @@ -92871,24 +92790,24 @@ - + - + - + - + - + - + @@ -92900,20 +92819,20 @@ - + - + - + - + - + @@ -92925,15 +92844,15 @@ - + - + - + @@ -92941,7 +92860,7 @@ - + @@ -92961,10 +92880,10 @@ - - - - + + + + @@ -92980,7 +92899,7 @@ - + @@ -93079,7 +92998,7 @@ - + @@ -93117,8 +93036,8 @@ - - + + @@ -93131,42 +93050,42 @@ - + - - + + - - + + - - + + - + - - + + - + - - - + + + - + @@ -93177,15 +93096,15 @@ - + - + - + - + @@ -93196,21 +93115,7 @@ - - - - - - - - - - - - - - - + @@ -93218,22 +93123,22 @@ - + - + - + - + - + - + @@ -93241,25 +93146,25 @@ - + - + - + - + @@ -93289,7 +93194,7 @@ - + @@ -93352,7 +93257,7 @@ - + @@ -93391,7 +93296,7 @@ - + @@ -93418,7 +93323,7 @@ - + @@ -93427,28 +93332,28 @@ - + - + - + - + - + - - + + - + @@ -93471,31 +93376,31 @@ - + - + - + - + - + - + - + - + @@ -93513,10 +93418,10 @@ - + - + @@ -93528,10 +93433,10 @@ - + - + @@ -93717,7 +93622,7 @@ - + @@ -93843,13 +93748,13 @@ - + - + - + @@ -93876,10 +93781,10 @@ - + - + @@ -93921,7 +93826,7 @@ - + @@ -93939,7 +93844,7 @@ - + @@ -93948,13 +93853,13 @@ - + - + @@ -93984,46 +93889,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -94037,15 +93942,15 @@ - + - + - + @@ -94060,7 +93965,7 @@ - + @@ -94072,7 +93977,7 @@ - + @@ -94093,7 +93998,7 @@ - + @@ -94102,7 +94007,7 @@ - + @@ -94110,7 +94015,7 @@ - + @@ -94130,7 +94035,7 @@ - + @@ -94162,18 +94067,18 @@ - + - + - + - + @@ -94197,12 +94102,12 @@ - + - + - + @@ -94238,7 +94143,7 @@ - + @@ -94250,7 +94155,7 @@ - + @@ -94265,7 +94170,7 @@ - + @@ -94273,10 +94178,10 @@ - + - + @@ -94285,15 +94190,15 @@ - + - + - + - + @@ -94305,13 +94210,13 @@ - + - + @@ -94353,7 +94258,7 @@ - + @@ -94521,16 +94426,16 @@ - + - + - + - + @@ -94542,13 +94447,13 @@ - + - + @@ -94559,94 +94464,94 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -94654,64 +94559,64 @@ - - + + - - + + - - + + - + - - - + + + - - + + - - + + - + - + - + - + @@ -94721,122 +94626,122 @@ - + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - + - + - + - + - + @@ -94849,21 +94754,21 @@ - + - + - + - + - - - - + + + + @@ -94872,73 +94777,73 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -94947,7 +94852,7 @@ - + @@ -94956,59 +94861,59 @@ - + - + - + - - - + + + - - + + - - + + - - + + - + - - - + + + - - - + + + - + - - + + @@ -95020,25 +94925,52 @@ - - + + - + - - - + + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -95049,13 +94981,13 @@ - + - + - + @@ -95064,15 +94996,15 @@ - + - - - - + + + + @@ -95107,11 +95039,11 @@ - + - + @@ -95179,7 +95111,7 @@ - + @@ -95211,16 +95143,16 @@ - + - + - + @@ -95281,21 +95213,21 @@ - + - + - - - + + + - + - + @@ -95333,12 +95265,12 @@ - - + + - + @@ -95346,7 +95278,7 @@ - + @@ -95354,7 +95286,7 @@ - + @@ -95362,12 +95294,12 @@ - + - - - + + + @@ -95380,30 +95312,30 @@ - - + + - + - + - + - + - + - + @@ -95419,22 +95351,22 @@ - + - + - + - - + + @@ -95451,7 +95383,7 @@ - + @@ -95472,10 +95404,10 @@ - - + + - + @@ -95484,8 +95416,8 @@ - - + + @@ -95493,25 +95425,25 @@ - + - + - + - + - + - + - + @@ -95531,14 +95463,14 @@ - - - - - - - - + + + + + + + + @@ -95546,7 +95478,7 @@ - + @@ -95555,8 +95487,8 @@ - - + + @@ -95570,11 +95502,11 @@ - + - + @@ -95590,41 +95522,41 @@ - - + + - - + + - + - - + + - + - + - + @@ -95646,13 +95578,13 @@ - + - + @@ -95716,7 +95648,7 @@ - + @@ -95743,29 +95675,29 @@ - + - + - + - + - + - + - + - + - + @@ -95786,61 +95718,61 @@ - + - - + + - - + + - - + + - - + + - - + + - + - + - + - + @@ -95848,7 +95780,7 @@ - + @@ -95856,26 +95788,26 @@ - - + + - - + + - + - + @@ -95901,31 +95833,31 @@ - + - + - + - + - + - + @@ -95937,7 +95869,7 @@ - + @@ -95964,12 +95896,12 @@ - + - + @@ -95984,13 +95916,13 @@ - + - + - + @@ -96002,55 +95934,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -96065,16 +95997,16 @@ - + - + - + @@ -96086,30 +96018,30 @@ - + - + - + - + - + - + - + - + @@ -96118,8 +96050,8 @@ - - + + @@ -96127,15 +96059,15 @@ - + - + - + - + @@ -96168,7 +96100,7 @@ - + @@ -96176,7 +96108,7 @@ - + @@ -96193,15 +96125,15 @@ - + - + - + - + @@ -96213,7 +96145,7 @@ - + @@ -96239,7 +96171,7 @@ - + @@ -96251,10 +96183,10 @@ - + - + @@ -96280,7 +96212,7 @@ - + @@ -96294,7 +96226,7 @@ - + @@ -96305,7 +96237,7 @@ - + @@ -96319,7 +96251,7 @@ - + @@ -96330,10 +96262,10 @@ - + - + @@ -96344,7 +96276,7 @@ - + @@ -96367,24 +96299,24 @@ - + - + - + - + - + - + - + @@ -96395,7 +96327,7 @@ - + @@ -96409,9 +96341,9 @@ - + - + @@ -96423,7 +96355,7 @@ - + @@ -96437,25 +96369,25 @@ - + - + - + - + - + - + - + @@ -96466,7 +96398,7 @@ - + @@ -96477,16 +96409,16 @@ - + - + - + - + @@ -96503,114 +96435,114 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - + - - + + - + - + - + - - + + - - + + - - + + - + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - + @@ -96623,28 +96555,28 @@ - - + + - + - + - + - + @@ -96659,7 +96591,7 @@ - + @@ -96671,22 +96603,22 @@ - - + + - + - + - + @@ -96695,20 +96627,38 @@ - + + + + + + + + + + + + + + + + + + - + - - - + + + + @@ -96719,11 +96669,11 @@ - + - + @@ -96732,14 +96682,14 @@ - + - + @@ -96750,9 +96700,9 @@ - + - + @@ -96760,7 +96710,7 @@ - + @@ -96768,13 +96718,13 @@ - + - + @@ -96782,45 +96732,45 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -96886,7 +96836,7 @@ - + @@ -96901,7 +96851,7 @@ - + @@ -96916,7 +96866,7 @@ - + @@ -96939,16 +96889,16 @@ - + - + - + @@ -96956,15 +96906,15 @@ - + - + - + - + @@ -96978,7 +96928,7 @@ - + @@ -96986,7 +96936,7 @@ - + @@ -96994,7 +96944,7 @@ - + @@ -97005,7 +96955,7 @@ - + @@ -97013,7 +96963,7 @@ - + @@ -97042,24 +96992,24 @@ - + - + - + - + - + - + @@ -97077,13 +97027,13 @@ - + - + - + @@ -97107,34 +97057,34 @@ - + - + - + - + - + - + - + - + @@ -97151,20 +97101,20 @@ - + - + - + - + - + @@ -97173,18 +97123,18 @@ - + - + - + - + - + @@ -97202,10 +97152,10 @@ - + - + @@ -97214,13 +97164,13 @@ - + - + - + @@ -97300,7 +97250,7 @@ - + @@ -97321,10 +97271,10 @@ - + - + @@ -97342,7 +97292,7 @@ - + @@ -97354,10 +97304,10 @@ - + - + @@ -97372,13 +97322,13 @@ - + - + @@ -97393,13 +97343,13 @@ - + - + - + @@ -97407,7 +97357,7 @@ - + @@ -97415,10 +97365,10 @@ - + - + @@ -97432,7 +97382,7 @@ - + @@ -97446,7 +97396,7 @@ - + @@ -97454,15 +97404,15 @@ - + - + - + - + @@ -97474,319 +97424,319 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -97812,23 +97762,23 @@ - + - + - + - + - + - + - + @@ -97837,7 +97787,7 @@ - + @@ -97851,32 +97801,32 @@ - + - + - + - + - + - + - + - + - + - + @@ -97884,27 +97834,27 @@ - + - + - + - + - + - + - + - + - + @@ -97912,12 +97862,12 @@ - + - + @@ -97925,7 +97875,7 @@ - + @@ -97948,10 +97898,10 @@ - + - + @@ -97962,12 +97912,12 @@ - + - + - + @@ -97985,7 +97935,7 @@ - + @@ -97995,7 +97945,7 @@ - + @@ -98006,7 +97956,7 @@ - + @@ -98015,74 +97965,74 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -98091,38 +98041,38 @@ - + - + - + - + - + - + - + - + - + - + @@ -98146,587 +98096,587 @@ - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - + - + - + - + - + - + - - + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - + + + + - - - + + + - + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - - - - - - + + + - - - - + + + + - - - + + + + + + + + + - - - - - + + + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + @@ -98735,44 +98685,44 @@ - - + + - + - + - - + + - + - + - + - + @@ -98783,108 +98733,108 @@ - + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + @@ -98893,106 +98843,106 @@ - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -99003,144 +98953,144 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -99149,9 +99099,9 @@ - + - + @@ -99160,7 +99110,7 @@ - + @@ -99175,31 +99125,31 @@ - + - + - + - + - + - + - - + + - + @@ -99208,53 +99158,53 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -99268,67 +99218,67 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -99336,9 +99286,9 @@ - + - + @@ -99347,7 +99297,7 @@ - + @@ -99355,19 +99305,19 @@ - + - + - + - + - + @@ -99382,32 +99332,32 @@ - + - + - + - + - + - + - + - + - + @@ -99421,22 +99371,22 @@ - + - + - + - + - + - + @@ -99454,7 +99404,7 @@ - + @@ -99465,7 +99415,7 @@ - + @@ -99476,13 +99426,13 @@ - + - + @@ -99493,75 +99443,75 @@ - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + - - - + + + - + - + - + - + - + - + - - + + - + - + + + + + + - - - - - - + - - - + + + @@ -99587,9 +99537,9 @@ - + - + @@ -99604,42 +99554,42 @@ - + - + - + - + - - + + - + - + - + - + - + @@ -99648,21 +99598,21 @@ - + - + - - + + - + @@ -99671,17 +99621,17 @@ - + - + - - + + @@ -99692,22 +99642,22 @@ - + - + - + - + @@ -99716,7 +99666,7 @@ - + @@ -99727,7 +99677,7 @@ - + @@ -99768,7 +99718,7 @@ - + @@ -99782,36 +99732,36 @@ - + - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -99821,7 +99771,7 @@ - + @@ -99839,22 +99789,22 @@ - - + + - + - + - + - + @@ -99865,77 +99815,77 @@ - + - - + + - - + + - + - - + + - + - + - + - + - - - - - - - - - - - - + + - - + + + + + + + + + + + + - - + + - - + + - - - - + + + + @@ -99943,7 +99893,7 @@ - + @@ -99971,6 +99921,25 @@ + + + + + + + + + + + + + + + + + + + @@ -99980,20 +99949,20 @@ - - + + - + - + - + @@ -100004,13 +99973,13 @@ - + - + - + @@ -100019,7 +99988,7 @@ - + @@ -100052,24 +100021,24 @@ - + - + - + - + - + @@ -100114,20 +100083,20 @@ - + - + - + - + - + - + @@ -100135,7 +100104,7 @@ - + @@ -100143,24 +100112,24 @@ - + - + - + - - - - - - - + + + + + + + @@ -100171,56 +100140,43 @@ - + - + - + + + + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - + - + @@ -100236,8 +100192,8 @@ - - + + @@ -100252,14 +100208,14 @@ - + - + - + @@ -100273,16 +100229,16 @@ - + - + - + - + @@ -100302,7 +100258,7 @@ - + @@ -100310,15 +100266,15 @@ - - - + + + - - + + @@ -100330,23 +100286,23 @@ - + - + - + - + - + - + @@ -100354,27 +100310,27 @@ - + - + - - + + - + - + @@ -100401,9 +100357,9 @@ - + - + @@ -100412,7 +100368,7 @@ - + @@ -100427,7 +100383,7 @@ - + @@ -100458,24 +100414,24 @@ - - + + - + - + - + - + @@ -100484,7 +100440,7 @@ - + @@ -100492,10 +100448,10 @@ - + - + @@ -100503,8 +100459,8 @@ - - + + @@ -100512,7 +100468,7 @@ - + @@ -100523,7 +100479,7 @@ - + @@ -100537,7 +100493,7 @@ - + @@ -100551,7 +100507,7 @@ - + @@ -100565,48 +100521,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -100615,13 +100571,13 @@ - + - + - + @@ -100635,21 +100591,21 @@ - + - + - + - + - + @@ -100666,61 +100622,61 @@ - + - + - + - + - + - + - + - - + + - + - + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + @@ -100733,95 +100689,95 @@ - - - + + + - - + + - - - + + + - + - - + + - + - - + + - - + + - - + + - + - + + - - + - + - + - + - + - + - + @@ -100835,135 +100791,135 @@ - - - - + + + + - + - + - + - + - + - + - + - - + + - + + + + + + + + + + + + + + - - + + - - + + + + + + + + + - + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - - + + - + - + - + - + - + - + - + - + @@ -100990,13 +100946,13 @@ - + - + @@ -101062,10 +101018,10 @@ - + - + @@ -101092,7 +101048,7 @@ - + @@ -101101,13 +101057,13 @@ - + - + - + @@ -101119,10 +101075,10 @@ - + - + @@ -101131,13 +101087,13 @@ - + - + - + @@ -101176,18 +101132,18 @@ - + - + - + - + @@ -101195,9 +101151,9 @@ - + - + @@ -101221,7 +101177,7 @@ - + @@ -101229,13 +101185,13 @@ - + - + @@ -101255,12 +101211,12 @@ - + - + - + @@ -101275,7 +101231,7 @@ - + @@ -101286,7 +101242,7 @@ - + @@ -101309,19 +101265,19 @@ - + - + - + - + @@ -101335,9 +101291,9 @@ - + - + @@ -101352,7 +101308,7 @@ - + @@ -101361,7 +101317,7 @@ - + @@ -101379,10 +101335,10 @@ - + - + @@ -101393,7 +101349,7 @@ - + @@ -101404,12 +101360,12 @@ - + - + @@ -101418,7 +101374,7 @@ - + @@ -101430,7 +101386,7 @@ - + @@ -101442,16 +101398,16 @@ - + - + - + @@ -101460,10 +101416,10 @@ - + - + @@ -101487,38 +101443,38 @@ - + - + - + - + - + - + - + - + - + @@ -101526,15 +101482,15 @@ - + - + - + @@ -101542,12 +101498,12 @@ - + - + - + @@ -101574,10 +101530,10 @@ - + - + @@ -101589,13 +101545,13 @@ - + - + - + @@ -101604,7 +101560,7 @@ - + @@ -101613,13 +101569,13 @@ - + - + - + @@ -101655,7 +101611,7 @@ - + @@ -101667,7 +101623,7 @@ - + @@ -101685,18 +101641,18 @@ - + - + - + - + @@ -101713,16 +101669,16 @@ - + - + - + @@ -101730,7 +101686,7 @@ - + @@ -101756,33 +101712,33 @@ - + - + - + - + - + - + - + - + - + - + @@ -101797,13 +101753,13 @@ - + - + @@ -101812,12 +101768,12 @@ - + - + - + @@ -101850,7 +101806,7 @@ - + @@ -101859,13 +101815,13 @@ - + - + @@ -101879,15 +101835,15 @@ - + - + - + - + @@ -101896,10 +101852,10 @@ - + - + @@ -101910,15 +101866,15 @@ - + - + - + @@ -101933,7 +101889,7 @@ - + @@ -101944,12 +101900,12 @@ - + - + - + @@ -101961,15 +101917,15 @@ - + - + - + - + @@ -101978,22 +101934,22 @@ - + - + - + - + - + @@ -102007,7 +101963,7 @@ - + @@ -102021,12 +101977,12 @@ - + - + - + @@ -102038,7 +101994,7 @@ - + @@ -102046,10 +102002,10 @@ - + - + @@ -102063,37 +102019,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -102113,7 +102069,7 @@ - + @@ -102121,16 +102077,16 @@ - + - + - + - + @@ -102139,39 +102095,39 @@ - + - + - + - + - + - + @@ -102179,24 +102135,24 @@ - + - + - + - + - + - + - + @@ -102208,7 +102164,7 @@ - + @@ -102219,7 +102175,7 @@ - + @@ -102227,15 +102183,15 @@ - + - + - + - + @@ -102249,7 +102205,7 @@ - + @@ -102257,7 +102213,7 @@ - + @@ -102269,15 +102225,15 @@ - + - + - + @@ -102297,27 +102253,27 @@ - + - + - + - + - + - + @@ -102325,7 +102281,7 @@ - + @@ -102336,10 +102292,10 @@ - + - + @@ -102368,336 +102324,336 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -102705,7 +102661,7 @@ - + @@ -102714,12 +102670,12 @@ - + - + - + @@ -102734,19 +102690,19 @@ - + - + - + - + @@ -102758,22 +102714,22 @@ - + - + - + - + - + @@ -102788,10 +102744,10 @@ - + - + @@ -102844,13 +102800,13 @@ - + - + @@ -102861,7 +102817,7 @@ - + @@ -102882,7 +102838,7 @@ - + @@ -102897,7 +102853,7 @@ - + @@ -102911,7 +102867,7 @@ - + @@ -102919,48 +102875,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -102971,7 +102927,7 @@ - + @@ -103006,10 +102962,10 @@ - + - + @@ -103018,7 +102974,7 @@ - + @@ -103051,7 +103007,7 @@ - + @@ -103060,10 +103016,10 @@ - + - + @@ -103072,21 +103028,21 @@ - + - + - + - + @@ -103097,7 +103053,7 @@ - + @@ -103135,16 +103091,16 @@ - + - + - + - + @@ -103162,10 +103118,10 @@ - + - + @@ -103183,13 +103139,13 @@ - + - + - + @@ -103210,7 +103166,7 @@ - + @@ -103231,7 +103187,7 @@ - + @@ -103260,7 +103216,7 @@ - + @@ -103271,7 +103227,7 @@ - + @@ -103279,7 +103235,7 @@ - + @@ -103296,10 +103252,10 @@ - + - + @@ -103337,7 +103293,7 @@ - + @@ -103372,7 +103328,7 @@ - + @@ -103452,7 +103408,7 @@ - + @@ -103461,9 +103417,9 @@ - + - + @@ -103511,7 +103467,7 @@ - + @@ -103520,12 +103476,12 @@ - + - + - + @@ -103554,9 +103510,9 @@ - + - + @@ -103571,7 +103527,7 @@ - + @@ -103579,9 +103535,9 @@ - + - + @@ -103590,7 +103546,7 @@ - + @@ -103608,28 +103564,28 @@ - + - + - + - + - + - + - + @@ -103638,23 +103594,23 @@ - + - + - + - + - + @@ -103663,7 +103619,7 @@ - + @@ -103681,9 +103637,9 @@ - + - + @@ -103695,7 +103651,7 @@ - + @@ -103704,16 +103660,16 @@ - + - + - + - + @@ -103725,7 +103681,7 @@ - + @@ -103742,9 +103698,9 @@ - + - + @@ -103759,12 +103715,12 @@ - + - + - + @@ -103779,7 +103735,7 @@ - + @@ -103791,10 +103747,10 @@ - + - + @@ -103812,22 +103768,22 @@ - + - + - + - + - + @@ -103857,24 +103813,24 @@ - + - + - + - + - + - + @@ -103883,15 +103839,15 @@ - + - + - + - + @@ -103899,7 +103855,7 @@ - + @@ -103935,21 +103891,21 @@ - + - + - + - + - + @@ -103979,7 +103935,7 @@ - + @@ -104002,9 +103958,9 @@ - + - + @@ -104028,10 +103984,10 @@ - + - + @@ -104042,7 +103998,7 @@ - + @@ -104050,7 +104006,7 @@ - + @@ -104061,7 +104017,7 @@ - + @@ -104069,45 +104025,45 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -104116,7 +104072,7 @@ - + @@ -104128,18 +104084,18 @@ - + - + - + - + @@ -104147,7 +104103,7 @@ - + @@ -104155,7 +104111,7 @@ - + @@ -104163,12 +104119,12 @@ - + - + - + @@ -104189,7 +104145,7 @@ - + @@ -104213,16 +104169,16 @@ - + - + - + @@ -104237,7 +104193,7 @@ - + @@ -104245,7 +104201,7 @@ - + @@ -104253,7 +104209,7 @@ - + @@ -104267,15 +104223,15 @@ - + - + - + - + @@ -104287,12 +104243,12 @@ - + - + @@ -104324,7 +104280,7 @@ - + @@ -104341,35 +104297,35 @@ - + - + - + - + - + - + - + - + - + @@ -104399,16 +104355,16 @@ - + - + - + @@ -104420,483 +104376,483 @@ - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - + - + - + - + - - + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + - - + + + + + + + + + - - + + - - + + - - - - - - - - - - - - - - + - + - + - - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + - - + + - + + + + + + + - + - + - + - + + - + - + - + - + + - + - + + - + - + + - + - - + + - + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - + + - + - - + + @@ -104908,143 +104864,143 @@ - - + + - - + + - - + + - - + + - + - - + + - + - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + @@ -105052,230 +105008,230 @@ - - + + - - + + - + - - + + - + - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - + - + - - + + - - + + - - + + - - - + + + - - + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - + + - - - + + + - + @@ -105285,14 +105241,14 @@ - + - + @@ -105302,7 +105258,7 @@ - + @@ -105310,7 +105266,7 @@ - + @@ -105457,7 +105413,7 @@ - + @@ -105745,13 +105701,13 @@ - + - + @@ -105768,12 +105724,12 @@ - + - - - - + + + + @@ -105786,9 +105742,9 @@ - - - + + + @@ -105803,36 +105759,36 @@ - + - + - + - + - + - + - + @@ -105842,7 +105798,7 @@ - + @@ -105864,74 +105820,74 @@ - + - + - + - + - - - + + + - - - + + + - + - + - - + + - + - - + + - + - + - + - + @@ -105943,22 +105899,22 @@ - + - + - + - + @@ -105966,57 +105922,57 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -106027,15 +105983,15 @@ - + - + - + @@ -106043,10 +105999,10 @@ - + - + @@ -106057,10 +106013,10 @@ - + - + @@ -106068,20 +106024,20 @@ - + - + - + - + - + @@ -106090,17 +106046,17 @@ - + - + - + - + - + @@ -106109,71 +106065,71 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -106184,29 +106140,29 @@ - + - + - + - + - + - + - + @@ -106220,7 +106176,7 @@ - + @@ -106234,10 +106190,10 @@ - + - + @@ -106248,10 +106204,10 @@ - + - + @@ -106268,10 +106224,10 @@ - + - + @@ -106288,7 +106244,7 @@ - + @@ -106299,23 +106255,23 @@ - + - + - + - + - + @@ -106323,7 +106279,7 @@ - + @@ -106331,7 +106287,7 @@ - + @@ -106339,7 +106295,7 @@ - + @@ -106350,10 +106306,10 @@ - + - + @@ -106361,7 +106317,7 @@ - + @@ -106372,7 +106328,7 @@ - + @@ -106386,10 +106342,10 @@ - + - + @@ -106397,7 +106353,7 @@ - + @@ -106408,10 +106364,10 @@ - + - + @@ -106420,19 +106376,19 @@ - + - - - + + + - - + + - + @@ -106441,22 +106397,22 @@ - + - - + + - - - + + + - - - + + + @@ -106464,24 +106420,24 @@ - + - - - + + + - + - - + + - + @@ -106496,7 +106452,7 @@ - + @@ -106504,7 +106460,7 @@ - + @@ -106519,13 +106475,13 @@ - + - + - + @@ -106548,19 +106504,19 @@ - + - + - + - + @@ -106578,20 +106534,20 @@ - + - - + + - + - + @@ -106606,7 +106562,7 @@ - + @@ -106614,10 +106570,10 @@ - + - + @@ -106625,9 +106581,9 @@ - - - + + + @@ -106635,11 +106591,11 @@ - + - + @@ -106647,9 +106603,9 @@ - + - + @@ -106660,7 +106616,7 @@ - + @@ -106668,35 +106624,35 @@ - + - - + + - + - - + + - - + + - + - + - + @@ -106706,11 +106662,11 @@ - + - + @@ -106745,22 +106701,22 @@ - + - + - + - + - + - + @@ -106781,10 +106737,10 @@ - + - + @@ -106793,7 +106749,7 @@ - + @@ -106801,9 +106757,9 @@ - + - + @@ -106812,12 +106768,12 @@ - + - + - + @@ -106847,17 +106803,9 @@ - - - - - - - - - + - + @@ -106869,7 +106817,7 @@ - + @@ -106893,42 +106841,42 @@ - - - - + + + + - + - + - - - - + + + + - + - + - + - + @@ -106937,7 +106885,7 @@ - + @@ -106946,17 +106894,17 @@ - - + + - + - + @@ -106971,64 +106919,64 @@ - + - + - + - - + + - + - - + + - - + + - - + + - + - - + + - + - + - + - + - + @@ -107037,20 +106985,20 @@ - + - - - + + + - + - + @@ -107062,31 +107010,31 @@ - + - + - + - - + + - + - + - + - + - + @@ -107097,7 +107045,7 @@ - + @@ -107108,7 +107056,7 @@ - + @@ -107125,119 +107073,119 @@ - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + @@ -107261,9 +107209,9 @@ - + - + @@ -107284,124 +107232,124 @@ - + - + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + - - - + + + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - + - - + + - - - + + + - - - + + + - - + + - + - + - + @@ -107419,12 +107367,12 @@ - + - + @@ -107439,7 +107387,7 @@ - + @@ -107454,10 +107402,10 @@ - + - + @@ -107478,7 +107426,7 @@ - + @@ -107487,7 +107435,7 @@ - + @@ -107504,41 +107452,41 @@ - + - + - + - + - + - + - + - - - - - - + + + + + + - + - + @@ -107550,81 +107498,81 @@ - + - - + + - - + + - - + + - - + + - - + + - + - + - + - - + + - + - - + + - + - - + + - + - + @@ -107639,19 +107587,19 @@ - + - + - + - + @@ -107668,36 +107616,36 @@ - - - + + + - + - + - - + + - + - - + + - + @@ -107711,45 +107659,45 @@ - - + + - - + + - + - - + + - + - + - - + + - - + + @@ -107760,26 +107708,26 @@ - + - + - + - + - + - + @@ -107791,78 +107739,78 @@ - - - - - - + + + + + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -107871,34 +107819,34 @@ - - - + + + - + - + - + - + - - + + @@ -107906,13 +107854,13 @@ - + - + @@ -107926,10 +107874,10 @@ - + - + @@ -107938,10 +107886,10 @@ - + - + @@ -107953,15 +107901,15 @@ - + - + - + - + @@ -107981,102 +107929,102 @@ - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + + - + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + @@ -108084,8 +108032,8 @@ - - + + @@ -108093,133 +108041,133 @@ - - + + - - - + + + - + - + - + - + - - + + - + - - + + - + - - + + - - - + + + - + - + - + - - + + - - + + - - + + - - + + - + - + - + - + - + + + + + + + + + + + + + - - - - - - - - - - - - - + - + @@ -108231,32 +108179,32 @@ - + - + - + - + - + - + - + @@ -108270,7 +108218,7 @@ - + @@ -108288,7 +108236,7 @@ - + @@ -108309,13 +108257,13 @@ - + - + - + @@ -108326,7 +108274,7 @@ - + @@ -108335,7 +108283,7 @@ - + @@ -108350,7 +108298,7 @@ - + @@ -108362,43 +108310,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -108413,13 +108361,13 @@ - + - + @@ -108428,31 +108376,31 @@ - + - + - + - + - + @@ -108482,13 +108430,13 @@ - + - + - + @@ -108500,12 +108448,12 @@ - + - + @@ -108513,19 +108461,19 @@ - + - + - + @@ -108534,7 +108482,7 @@ - + @@ -108543,19 +108491,19 @@ - + - + - + - + - + @@ -108612,10 +108560,10 @@ - + - + @@ -108626,7 +108574,7 @@ - + @@ -108655,48 +108603,48 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -108723,7 +108671,7 @@ - + @@ -108734,28 +108682,28 @@ - + - + - + - + - + - + @@ -108768,7 +108716,7 @@ - + @@ -108776,13 +108724,13 @@ - + - + @@ -108794,65 +108742,65 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -108864,15 +108812,15 @@ - + - + - + - + @@ -108899,23 +108847,23 @@ - + - + - + - + - + @@ -108923,7 +108871,7 @@ - + @@ -108958,35 +108906,35 @@ - + - + - + - + - + - + - + - + - + @@ -109003,7 +108951,7 @@ - + @@ -109014,7 +108962,7 @@ - + @@ -109022,15 +108970,15 @@ - + - + - + @@ -109038,7 +108986,7 @@ - + @@ -109055,7 +109003,7 @@ - + @@ -109075,13 +109023,13 @@ - + - + - + @@ -109089,21 +109037,21 @@ - + - + - + - + @@ -109124,10 +109072,10 @@ - + - + @@ -109138,7 +109086,7 @@ - + @@ -109153,10 +109101,10 @@ - + - + @@ -109174,7 +109122,7 @@ - + @@ -109186,7 +109134,7 @@ - + @@ -109197,37 +109145,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -109248,9 +109196,9 @@ - + - + @@ -109259,16 +109207,16 @@ - + - + - + @@ -109281,66 +109229,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -109348,19 +109296,19 @@ - + - + - + - + @@ -109371,7 +109319,7 @@ - + @@ -109379,18 +109327,18 @@ - + - + - + - + - + @@ -109401,7 +109349,7 @@ - + @@ -109412,15 +109360,15 @@ - + - + - + - + @@ -109432,16 +109380,16 @@ - + - + - + @@ -109492,25 +109440,25 @@ - + - + - + - + - + @@ -109534,7 +109482,7 @@ - + @@ -109576,7 +109524,7 @@ - + @@ -109584,10 +109532,10 @@ - + - + @@ -109617,26 +109565,26 @@ - + - + - + - + - + - + @@ -109647,21 +109595,21 @@ - + - + - + - + - + - + @@ -109669,7 +109617,7 @@ - + @@ -109677,23 +109625,23 @@ - + - + - + - + - + @@ -109711,13 +109659,13 @@ - + - + @@ -109726,18 +109674,18 @@ - + - + - + - + @@ -109752,16 +109700,16 @@ - - + + - + - + @@ -109800,7 +109748,7 @@ - + @@ -109808,19 +109756,19 @@ - + - + - + - + @@ -109835,10 +109783,10 @@ - + - + @@ -109894,16 +109842,16 @@ - + - + - + @@ -109932,7 +109880,7 @@ - + @@ -109955,48 +109903,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -110005,140 +109953,140 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -110149,15 +110097,15 @@ - + - + - + - + @@ -110168,9 +110116,9 @@ - + - + @@ -110194,81 +110142,81 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -110301,7 +110249,7 @@ - + @@ -110310,15 +110258,15 @@ - + - + - + @@ -110333,203 +110281,203 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + - - + + - + - + - + - + - + - - + + - + - + - + - - + + @@ -110538,12 +110486,12 @@ - + - + @@ -110557,26 +110505,26 @@ - + - + - - + + - - + + @@ -110584,406 +110532,406 @@ - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + - - - + + + - - + + - - + + + - - + + - - - + + - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - - + - - + + - + + - - + + - + - - + + + + + + + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + - - + - + + + + + - - + + + + + - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - + - + @@ -110991,7 +110939,7 @@ - + @@ -110999,7 +110947,7 @@ - + @@ -111008,8 +110956,8 @@ - - + + @@ -111035,112 +110983,113 @@ - + - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + @@ -111152,62 +111101,62 @@ - + - - - - + + + + - + - + - - - + + + - - - - + + + + - - - + + + - + - + - + @@ -111221,7 +111170,7 @@ - + @@ -111247,7 +111196,7 @@ - + @@ -111265,78 +111214,78 @@ - - + + - + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + @@ -111344,59 +111293,59 @@ - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + @@ -111408,13 +111357,13 @@ - + - + - + @@ -111465,10 +111414,10 @@ - + - + @@ -111492,7 +111441,7 @@ - + @@ -111504,21 +111453,21 @@ - + - + - + - + - + @@ -111527,13 +111476,13 @@ - + - + @@ -111541,10 +111490,10 @@ - + - + @@ -111613,13 +111562,13 @@ - + - + - + @@ -111628,10 +111577,10 @@ - + - + @@ -111696,7 +111645,7 @@ - + @@ -111708,7 +111657,7 @@ - + @@ -111719,9 +111668,9 @@ - + - + @@ -111736,25 +111685,25 @@ - + - + - + - + - + - + - + @@ -111850,7 +111799,7 @@ - + @@ -111858,10 +111807,10 @@ - + - + @@ -111870,21 +111819,21 @@ - + - + - + - + @@ -111895,74 +111844,74 @@ - + - + - + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + - - - + + + - - + + - - + + - + - + - + - + - + - + - + From 2a84b66a5d223bea26fb4680d162f039ff0560a0 Mon Sep 17 00:00:00 2001 From: Hyesoo Yu Date: Tue, 3 Mar 2020 17:54:36 +0900 Subject: [PATCH 089/136] ANDROID: staging: ion: implement vmap for built-in heaps dma_buf_vmap() on ION buffers returns -EOPNOTSUPP if the heap of ION buffer does not implement its own vmap callback. Even the default system heap does not implement vmap callback, so vmap attempt of ION buffer will always fail. However vmap of ION buffer is much more reasonable to be supported by default than errors, so this patch implements vmap callback. Bug: 150258007 Signed-off-by: Hyesoo Yu Change-Id: I243eb7ded49843e719532ad1b1cb7ab37e84460d --- drivers/staging/android/ion/ion_dma_buf.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/staging/android/ion/ion_dma_buf.c b/drivers/staging/android/ion/ion_dma_buf.c index c3734ff40940..5a2e17917099 100644 --- a/drivers/staging/android/ion/ion_dma_buf.c +++ b/drivers/staging/android/ion/ion_dma_buf.c @@ -287,11 +287,16 @@ static void *ion_dma_buf_vmap(struct dma_buf *dmabuf) { struct ion_buffer *buffer = dmabuf->priv; struct ion_heap *heap = buffer->heap; + void *vaddr; - if (!heap->buf_ops.vmap) - return ERR_PTR(-EOPNOTSUPP); + if (heap->buf_ops.vmap) + return heap->buf_ops.vmap(dmabuf); - return heap->buf_ops.vmap(dmabuf); + mutex_lock(&buffer->lock); + vaddr = ion_buffer_kmap_get(buffer); + mutex_unlock(&buffer->lock); + + return vaddr; } static void ion_dma_buf_vunmap(struct dma_buf *dmabuf, void *vaddr) @@ -299,10 +304,14 @@ static void ion_dma_buf_vunmap(struct dma_buf *dmabuf, void *vaddr) struct ion_buffer *buffer = dmabuf->priv; struct ion_heap *heap = buffer->heap; - if (!heap->buf_ops.vunmap) + if (heap->buf_ops.vunmap) { + heap->buf_ops.vunmap(dmabuf, vaddr); return; + } - return heap->buf_ops.vunmap(dmabuf, vaddr); + mutex_lock(&buffer->lock); + ion_buffer_kmap_put(buffer); + mutex_unlock(&buffer->lock); } static int ion_dma_buf_get_flags(struct dma_buf *dmabuf, unsigned long *flags) From b43ebf17806ba44a39d390b4e4bae282b876891c Mon Sep 17 00:00:00 2001 From: Yangtao Li Date: Mon, 3 Feb 2020 15:45:17 +0000 Subject: [PATCH 090/136] UPSTREAM: cpufreq: Make cpufreq_global_kobject static The cpufreq_global_kobject is only used internally by cpufreq.c after commit 2361be236662 ("cpufreq: Don't create empty /sys/devices/system/cpu/cpufreq directory"). Make it static. Signed-off-by: Yangtao Li [ rjw: Add empty line after cpufreq_global_kobject definition ] Signed-off-by: Rafael J. Wysocki (cherry picked from commit 183edb20e60a73925bf3b60e2f4796898167262f) Signed-off-by: Greg Kroah-Hartman Change-Id: Ib3f1ca9000266c968ddb1af9f8df8e9c974a11dc --- drivers/cpufreq/cpufreq.c | 5 ++--- include/linux/cpufreq.h | 3 --- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index d813c7c0d626..2d9814984b60 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -106,6 +106,8 @@ bool have_governor_per_policy(void) } EXPORT_SYMBOL_GPL(have_governor_per_policy); +static struct kobject *cpufreq_global_kobject; + struct kobject *get_governor_parent_kobj(struct cpufreq_policy *policy) { if (have_governor_per_policy()) @@ -2764,9 +2766,6 @@ int cpufreq_unregister_driver(struct cpufreq_driver *driver) } EXPORT_SYMBOL_GPL(cpufreq_unregister_driver); -struct kobject *cpufreq_global_kobject; -EXPORT_SYMBOL(cpufreq_global_kobject); - static int __init cpufreq_core_init(void) { if (cpufreq_disabled()) diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index cf3be353a2cc..486c1dd889f6 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h @@ -201,9 +201,6 @@ static inline bool policy_is_shared(struct cpufreq_policy *policy) return cpumask_weight(policy->cpus) > 1; } -/* /sys/devices/system/cpu/cpufreq: entry point for global variables */ -extern struct kobject *cpufreq_global_kobject; - #ifdef CONFIG_CPU_FREQ unsigned int cpufreq_get(unsigned int cpu); unsigned int cpufreq_quick_get(unsigned int cpu); From 189ced91cd7b0e440b0be876406fd36313a11c3f Mon Sep 17 00:00:00 2001 From: Kelly Rossmoyer Date: Tue, 7 Apr 2020 12:25:33 -0700 Subject: [PATCH 091/136] ANDROID: power: wakeup_reason: wake reason enhancements These changes build upon the existing Android kernel wakeup reason code to: * improve the positioning of suspend abort logging calls in suspend flow * add logging of abnormal wakeup reasons like unexpected HW IRQs and IRQs configured as both wake-enabled and no-suspend * add support for capturing deferred-processing threaded nested IRQs as wakeup reasons rather than their synchronously-processed parents Bug: 150970830 Bug: 140217217 Bug: 120445600 Signed-off-by: Kelly Rossmoyer Change-Id: I903b811a0fe11a605a25815c3a341668a23de700 --- drivers/base/power/main.c | 13 +- drivers/base/power/wakeup.c | 21 +- drivers/irqchip/irq-gic-v3.c | 5 + include/linux/wakeup_reason.h | 9 +- kernel/irq/chip.c | 17 +- kernel/power/process.c | 9 - kernel/power/suspend.c | 20 +- kernel/power/wakeup_reason.c | 391 +++++++++++++++++++++++++--------- 8 files changed, 361 insertions(+), 124 deletions(-) diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index 4771e218d5f1..972227eae22e 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -1342,6 +1342,8 @@ static int __device_suspend_noirq(struct device *dev, pm_message_t state, bool a error = dpm_run_callback(callback, dev, state, info); if (error) { async_error = error; + log_suspend_abort_reason("Callback failed on %s in %pS returned %d", + dev_name(dev), callback, error); goto Complete; } @@ -1549,6 +1551,8 @@ static int __device_suspend_late(struct device *dev, pm_message_t state, bool as error = dpm_run_callback(callback, dev, state, info); if (error) { async_error = error; + log_suspend_abort_reason("Callback failed on %s in %pS returned %d", + dev_name(dev), callback, error); goto Complete; } dpm_propagate_wakeup_to_parent(dev); @@ -1716,7 +1720,6 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async) pm_callback_t callback = NULL; const char *info = NULL; int error = 0; - char suspend_abort[MAX_SUSPEND_ABORT_LEN]; DECLARE_DPM_WATCHDOG_ON_STACK(wd); TRACE_DEVICE(dev); @@ -1740,9 +1743,6 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async) if (pm_wakeup_pending()) { dev->power.direct_complete = false; - pm_get_active_wakeup_sources(suspend_abort, - MAX_SUSPEND_ABORT_LEN); - log_suspend_abort_reason(suspend_abort); async_error = -EBUSY; goto Complete; } @@ -1819,6 +1819,9 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async) dpm_propagate_wakeup_to_parent(dev); dpm_clear_superiors_direct_complete(dev); + } else { + log_suspend_abort_reason("Callback failed on %s in %pS returned %d", + dev_name(dev), callback, error); } device_unlock(dev); @@ -2028,6 +2031,8 @@ int dpm_prepare(pm_message_t state) } pr_info("Device %s not prepared for power transition: code %d\n", dev_name(dev), error); + log_suspend_abort_reason("Device %s not prepared for power transition: code %d", + dev_name(dev), error); dpm_save_failed_dev(dev_name(dev)); put_device(dev); break; diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c index 06b3ce836a24..c45e3b1954de 100644 --- a/drivers/base/power/wakeup.c +++ b/drivers/base/power/wakeup.c @@ -15,7 +15,9 @@ #include #include #include -#include +#include +#include +#include #include #include "power.h" @@ -883,6 +885,7 @@ bool pm_wakeup_pending(void) { unsigned long flags; bool ret = false; + char suspend_abort[MAX_SUSPEND_ABORT_LEN]; raw_spin_lock_irqsave(&events_lock, flags); if (events_check_enabled) { @@ -897,6 +900,10 @@ bool pm_wakeup_pending(void) if (ret) { pm_pr_dbg("Wakeup pending, aborting suspend\n"); pm_print_active_wakeup_sources(); + pm_get_active_wakeup_sources(suspend_abort, + MAX_SUSPEND_ABORT_LEN); + log_suspend_abort_reason(suspend_abort); + pr_info("PM: %s\n", suspend_abort); } return ret || atomic_read(&pm_abort_suspend) > 0; @@ -924,6 +931,18 @@ void pm_wakeup_clear(bool reset) void pm_system_irq_wakeup(unsigned int irq_number) { if (pm_wakeup_irq == 0) { + struct irq_desc *desc; + const char *name = "null"; + + desc = irq_to_desc(irq_number); + if (desc == NULL) + name = "stray irq"; + else if (desc->action && desc->action->name) + name = desc->action->name; + + log_irq_wakeup_reason(irq_number); + pr_warn("%s: %d triggered %s\n", __func__, irq_number, name); + pm_wakeup_irq = irq_number; pm_system_wakeup(); } diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c index b3d133b549fb..d679edbcf450 100644 --- a/drivers/irqchip/irq-gic-v3.c +++ b/drivers/irqchip/irq-gic-v3.c @@ -18,6 +18,8 @@ #include #include #include +#include + #include #include @@ -648,6 +650,9 @@ static asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs err = handle_domain_irq(gic_data.domain, irqnr, regs); if (err) { WARN_ONCE(true, "Unexpected interrupt received!\n"); + log_abnormal_wakeup_reason( + "unexpected HW IRQ %u", irqnr); + gic_deactivate_unhandled(irqnr); } return; diff --git a/include/linux/wakeup_reason.h b/include/linux/wakeup_reason.h index 9fbe209c7177..54f5caaa5cde 100644 --- a/include/linux/wakeup_reason.h +++ b/include/linux/wakeup_reason.h @@ -20,11 +20,18 @@ #define MAX_SUSPEND_ABORT_LEN 256 -void log_wakeup_reason(int irq); #ifdef CONFIG_SUSPEND +void log_irq_wakeup_reason(int irq); +void log_threaded_irq_wakeup_reason(int irq, int parent_irq); void log_suspend_abort_reason(const char *fmt, ...); +void log_abnormal_wakeup_reason(const char *fmt, ...); +void clear_wakeup_reasons(void); #else +static inline void log_irq_wakeup_reason(int irq) { } +static inline void log_threaded_irq_wakeup_reason(int irq, int parent_irq) { } static inline void log_suspend_abort_reason(const char *fmt, ...) { } +static inline void log_abnormal_wakeup_reason(const char *fmt, ...) { } +static inline void clear_wakeup_reasons(void) { } #endif #endif /* _LINUX_WAKEUP_REASON_H */ diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index b3fa2d87d2f3..d78904ddf9a8 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -14,6 +14,7 @@ #include #include #include +#include #include @@ -507,8 +508,22 @@ static bool irq_may_run(struct irq_desc *desc) * If the interrupt is not in progress and is not an armed * wakeup interrupt, proceed. */ - if (!irqd_has_set(&desc->irq_data, mask)) + if (!irqd_has_set(&desc->irq_data, mask)) { +#ifdef CONFIG_PM_SLEEP + if (unlikely(desc->no_suspend_depth && + irqd_is_wakeup_set(&desc->irq_data))) { + unsigned int irq = irq_desc_get_irq(desc); + const char *name = "(unnamed)"; + + if (desc->action && desc->action->name) + name = desc->action->name; + + log_abnormal_wakeup_reason("misconfigured IRQ %u %s", + irq, name); + } +#endif return true; + } /* * If the interrupt is an armed wakeup source, mark it pending diff --git a/kernel/power/process.c b/kernel/power/process.c index dfd2494543c1..da378ace6d0a 100644 --- a/kernel/power/process.c +++ b/kernel/power/process.c @@ -22,7 +22,6 @@ #include #include #include -#include /* * Timeout for stopping processes @@ -39,9 +38,6 @@ static int try_to_freeze_tasks(bool user_only) unsigned int elapsed_msecs; bool wakeup = false; int sleep_usecs = USEC_PER_MSEC; -#ifdef CONFIG_PM_SLEEP - char suspend_abort[MAX_SUSPEND_ABORT_LEN]; -#endif start = ktime_get_boottime(); @@ -71,11 +67,6 @@ static int try_to_freeze_tasks(bool user_only) break; if (pm_wakeup_pending()) { -#ifdef CONFIG_PM_SLEEP - pm_get_active_wakeup_sources(suspend_abort, - MAX_SUSPEND_ABORT_LEN); - log_suspend_abort_reason(suspend_abort); -#endif wakeup = true; break; } diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index ba1439aef895..44dfe0b3dfa7 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c @@ -140,6 +140,7 @@ static void s2idle_loop(void) } pm_wakeup_clear(false); + clear_wakeup_reasons(); s2idle_enter(); } @@ -362,6 +363,7 @@ static int suspend_prepare(suspend_state_t state) if (!error) return 0; + log_suspend_abort_reason("One or more tasks refusing to freeze"); suspend_stats.failed_freeze++; dpm_save_failed_step(SUSPEND_FREEZE); Finish: @@ -391,7 +393,6 @@ void __weak arch_suspend_enable_irqs(void) */ static int suspend_enter(suspend_state_t state, bool *wakeup) { - char suspend_abort[MAX_SUSPEND_ABORT_LEN]; int error, last_dev; error = platform_suspend_prepare(state); @@ -403,8 +404,8 @@ static int suspend_enter(suspend_state_t state, bool *wakeup) last_dev = suspend_stats.last_failed_dev + REC_FAILED_NUM - 1; last_dev %= REC_FAILED_NUM; pr_err("late suspend of devices failed\n"); - log_suspend_abort_reason("%s device failed to power down", - suspend_stats.failed_devs[last_dev]); + log_suspend_abort_reason("late suspend of %s device failed", + suspend_stats.failed_devs[last_dev]); goto Platform_finish; } error = platform_suspend_prepare_late(state); @@ -417,7 +418,7 @@ static int suspend_enter(suspend_state_t state, bool *wakeup) last_dev %= REC_FAILED_NUM; pr_err("noirq suspend of devices failed\n"); log_suspend_abort_reason("noirq suspend of %s device failed", - suspend_stats.failed_devs[last_dev]); + suspend_stats.failed_devs[last_dev]); goto Platform_early_resume; } error = platform_suspend_prepare_noirq(state); @@ -453,9 +454,6 @@ static int suspend_enter(suspend_state_t state, bool *wakeup) trace_suspend_resume(TPS("machine_suspend"), state, false); } else if (*wakeup) { - pm_get_active_wakeup_sources(suspend_abort, - MAX_SUSPEND_ABORT_LEN); - log_suspend_abort_reason(suspend_abort); error = -EBUSY; } syscore_resume(); @@ -490,7 +488,7 @@ static int suspend_enter(suspend_state_t state, bool *wakeup) */ int suspend_devices_and_enter(suspend_state_t state) { - int error, last_dev; + int error; bool wakeup = false; if (!sleep_state_supported(state)) @@ -509,11 +507,9 @@ int suspend_devices_and_enter(suspend_state_t state) suspend_test_start(); error = dpm_suspend_start(PMSG_SUSPEND); if (error) { - last_dev = suspend_stats.last_failed_dev + REC_FAILED_NUM - 1; - last_dev %= REC_FAILED_NUM; pr_err("Some devices failed to suspend, or early wake event detected\n"); - log_suspend_abort_reason("%s device failed to suspend, or early wake event detected", - suspend_stats.failed_devs[last_dev]); + log_suspend_abort_reason( + "Some devices failed to suspend, or early wake event detected"); goto Recover_platform; } suspend_test_finish("suspend devices"); diff --git a/kernel/power/wakeup_reason.c b/kernel/power/wakeup_reason.c index 3ce5c902e3d3..503a71fc49fc 100644 --- a/kernel/power/wakeup_reason.c +++ b/kernel/power/wakeup_reason.c @@ -4,7 +4,7 @@ * Logs the reasons which caused the kernel to resume from * the suspend mode. * - * Copyright (C) 2014 Google, Inc. + * Copyright (C) 2020 Google, Inc. * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. @@ -26,42 +26,282 @@ #include #include #include +#include +/* + * struct wakeup_irq_node - stores data and relationships for IRQs logged as + * either base or nested wakeup reasons during suspend/resume flow. + * @siblings - for membership on leaf or parent IRQ lists + * @irq - the IRQ number + * @irq_name - the name associated with the IRQ, or a default if none + */ +struct wakeup_irq_node { + struct list_head siblings; + int irq; + const char *irq_name; +}; -#define MAX_WAKEUP_REASON_IRQS 32 -static int irq_list[MAX_WAKEUP_REASON_IRQS]; -static int irqcount; +static DEFINE_SPINLOCK(wakeup_reason_lock); + +static LIST_HEAD(leaf_irqs); /* kept in ascending IRQ sorted order */ +static LIST_HEAD(parent_irqs); /* unordered */ + +static struct kmem_cache *wakeup_irq_nodes_cache; + +static const char *default_irq_name = "(unnamed)"; + +static struct kobject *kobj; + +static bool capture_reasons; static bool suspend_abort; -static char abort_reason[MAX_SUSPEND_ABORT_LEN]; -static struct kobject *wakeup_reason; -static spinlock_t resume_reason_lock; +static bool abnormal_wake; +static char non_irq_wake_reason[MAX_SUSPEND_ABORT_LEN]; static ktime_t last_monotime; /* monotonic time before last suspend */ static ktime_t curr_monotime; /* monotonic time after last suspend */ static ktime_t last_stime; /* monotonic boottime offset before last suspend */ static ktime_t curr_stime; /* monotonic boottime offset after last suspend */ -static ssize_t last_resume_reason_show(struct kobject *kobj, struct kobj_attribute *attr, - char *buf) +static void init_node(struct wakeup_irq_node *p, int irq) { - int irq_no, buf_offset = 0; struct irq_desc *desc; - unsigned long flags; - spin_lock_irqsave(&resume_reason_lock, flags); - if (suspend_abort) { - buf_offset = sprintf(buf, "Abort: %s", abort_reason); - } else { - for (irq_no = 0; irq_no < irqcount; irq_no++) { - desc = irq_to_desc(irq_list[irq_no]); - if (desc && desc->action && desc->action->name) - buf_offset += sprintf(buf + buf_offset, "%d %s\n", - irq_list[irq_no], desc->action->name); + + INIT_LIST_HEAD(&p->siblings); + + p->irq = irq; + desc = irq_to_desc(irq); + if (desc && desc->action && desc->action->name) + p->irq_name = desc->action->name; + else + p->irq_name = default_irq_name; +} + +static struct wakeup_irq_node *create_node(int irq) +{ + struct wakeup_irq_node *result; + + result = kmem_cache_alloc(wakeup_irq_nodes_cache, GFP_ATOMIC); + if (unlikely(!result)) + pr_warn("Failed to log wakeup IRQ %d\n", irq); + else + init_node(result, irq); + + return result; +} + +static void delete_list(struct list_head *head) +{ + struct wakeup_irq_node *n; + + while (!list_empty(head)) { + n = list_first_entry(head, struct wakeup_irq_node, siblings); + list_del(&n->siblings); + kmem_cache_free(wakeup_irq_nodes_cache, n); + } +} + +static bool add_sibling_node_sorted(struct list_head *head, int irq) +{ + struct wakeup_irq_node *n; + struct list_head *predecessor = head; + + if (unlikely(WARN_ON(!head))) + return NULL; + + if (!list_empty(head)) + list_for_each_entry(n, head, siblings) { + if (n->irq < irq) + predecessor = &n->siblings; + else if (n->irq == irq) + return true; else - buf_offset += sprintf(buf + buf_offset, "%d\n", - irq_list[irq_no]); + break; + } + + n = create_node(irq); + if (n) { + list_add(&n->siblings, predecessor); + return true; + } + + return false; +} + +static struct wakeup_irq_node *find_node_in_list(struct list_head *head, + int irq) +{ + struct wakeup_irq_node *n; + + if (unlikely(WARN_ON(!head))) + return NULL; + + list_for_each_entry(n, head, siblings) + if (n->irq == irq) + return n; + + return NULL; +} + +void log_irq_wakeup_reason(int irq) +{ + unsigned long flags; + + spin_lock_irqsave(&wakeup_reason_lock, flags); + + if (!capture_reasons) { + spin_unlock_irqrestore(&wakeup_reason_lock, flags); + return; + } + + if (find_node_in_list(&parent_irqs, irq) == NULL) + add_sibling_node_sorted(&leaf_irqs, irq); + + spin_unlock_irqrestore(&wakeup_reason_lock, flags); +} + +void log_threaded_irq_wakeup_reason(int irq, int parent_irq) +{ + struct wakeup_irq_node *parent; + unsigned long flags; + + /* + * Intentionally unsynchronized. Calls that come in after we have + * resumed should have a fast exit path since there's no work to be + * done, any any coherence issue that could cause a wrong value here is + * both highly improbable - given the set/clear timing - and very low + * impact (parent IRQ gets logged instead of the specific child). + */ + if (!capture_reasons) + return; + + spin_lock_irqsave(&wakeup_reason_lock, flags); + + if (!capture_reasons || (find_node_in_list(&leaf_irqs, irq) != NULL)) { + spin_unlock_irqrestore(&wakeup_reason_lock, flags); + return; + } + + parent = find_node_in_list(&parent_irqs, parent_irq); + if (parent != NULL) + add_sibling_node_sorted(&leaf_irqs, irq); + else { + parent = find_node_in_list(&leaf_irqs, parent_irq); + if (parent != NULL) { + list_del_init(&parent->siblings); + list_add_tail(&parent->siblings, &parent_irqs); + add_sibling_node_sorted(&leaf_irqs, irq); } } - spin_unlock_irqrestore(&resume_reason_lock, flags); + + spin_unlock_irqrestore(&wakeup_reason_lock, flags); +} + +void __log_abort_or_abnormal_wake(bool abort, const char *fmt, va_list args) +{ + unsigned long flags; + + spin_lock_irqsave(&wakeup_reason_lock, flags); + + /* Suspend abort or abnormal wake reason has already been logged. */ + if (suspend_abort || abnormal_wake) { + spin_unlock_irqrestore(&wakeup_reason_lock, flags); + return; + } + + suspend_abort = abort; + abnormal_wake = !abort; + vsnprintf(non_irq_wake_reason, MAX_SUSPEND_ABORT_LEN, fmt, args); + + spin_unlock_irqrestore(&wakeup_reason_lock, flags); +} + +void log_suspend_abort_reason(const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + __log_abort_or_abnormal_wake(true, fmt, args); + va_end(args); +} + +void log_abnormal_wakeup_reason(const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + __log_abort_or_abnormal_wake(false, fmt, args); + va_end(args); +} + +void clear_wakeup_reasons(void) +{ + unsigned long flags; + + spin_lock_irqsave(&wakeup_reason_lock, flags); + + delete_list(&leaf_irqs); + delete_list(&parent_irqs); + suspend_abort = false; + abnormal_wake = false; + capture_reasons = true; + + spin_unlock_irqrestore(&wakeup_reason_lock, flags); +} + +static void print_wakeup_sources(void) +{ + struct wakeup_irq_node *n; + unsigned long flags; + + spin_lock_irqsave(&wakeup_reason_lock, flags); + + capture_reasons = false; + + if (suspend_abort) { + pr_info("Abort: %s\n", non_irq_wake_reason); + spin_unlock_irqrestore(&wakeup_reason_lock, flags); + return; + } + + if (!list_empty(&leaf_irqs)) + list_for_each_entry(n, &leaf_irqs, siblings) + pr_info("Resume caused by IRQ %d, %s\n", n->irq, + n->irq_name); + else if (abnormal_wake) + pr_info("Resume caused by %s\n", non_irq_wake_reason); + else + pr_info("Resume cause unknown\n"); + + spin_unlock_irqrestore(&wakeup_reason_lock, flags); +} + +static ssize_t last_resume_reason_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + ssize_t buf_offset = 0; + struct wakeup_irq_node *n; + unsigned long flags; + + spin_lock_irqsave(&wakeup_reason_lock, flags); + + if (suspend_abort) { + buf_offset = scnprintf(buf, PAGE_SIZE, "Abort: %s", + non_irq_wake_reason); + spin_unlock_irqrestore(&wakeup_reason_lock, flags); + return buf_offset; + } + + if (!list_empty(&leaf_irqs)) + list_for_each_entry(n, &leaf_irqs, siblings) + buf_offset += scnprintf(buf + buf_offset, + PAGE_SIZE - buf_offset, + "%d %s\n", n->irq, n->irq_name); + else if (abnormal_wake) + buf_offset = scnprintf(buf, PAGE_SIZE, "-1 %s", + non_irq_wake_reason); + + spin_unlock_irqrestore(&wakeup_reason_lock, flags); + return buf_offset; } @@ -90,8 +330,8 @@ static ssize_t last_suspend_time_show(struct kobject *kobj, /* Export suspend_resume_time and sleep_time in pair here. */ return sprintf(buf, "%llu.%09lu %llu.%09lu\n", - suspend_resume_time.tv_sec, suspend_resume_time.tv_nsec, - sleep_time.tv_sec, sleep_time.tv_nsec); + suspend_resume_time.tv_sec, suspend_resume_time.tv_nsec, + sleep_time.tv_sec, sleep_time.tv_nsec); } static struct kobj_attribute resume_reason = __ATTR_RO(last_resume_reason); @@ -106,74 +346,24 @@ static struct attribute_group attr_group = { .attrs = attrs, }; -/* - * logs all the wake up reasons to the kernel - * stores the irqs to expose them to the userspace via sysfs - */ -void log_wakeup_reason(int irq) -{ - struct irq_desc *desc; - unsigned long flags; - desc = irq_to_desc(irq); - if (desc && desc->action && desc->action->name) - printk(KERN_INFO "Resume caused by IRQ %d, %s\n", irq, - desc->action->name); - else - printk(KERN_INFO "Resume caused by IRQ %d\n", irq); - - spin_lock_irqsave(&resume_reason_lock, flags); - if (irqcount == MAX_WAKEUP_REASON_IRQS) { - spin_unlock_irqrestore(&resume_reason_lock, flags); - printk(KERN_WARNING "Resume caused by more than %d IRQs\n", - MAX_WAKEUP_REASON_IRQS); - return; - } - - irq_list[irqcount++] = irq; - spin_unlock_irqrestore(&resume_reason_lock, flags); -} - -void log_suspend_abort_reason(const char *fmt, ...) -{ - unsigned long flags; - va_list args; - - spin_lock_irqsave(&resume_reason_lock, flags); - - //Suspend abort reason has already been logged. - if (suspend_abort) { - spin_unlock_irqrestore(&resume_reason_lock, flags); - return; - } - - suspend_abort = true; - va_start(args, fmt); - vsnprintf(abort_reason, MAX_SUSPEND_ABORT_LEN, fmt, args); - va_end(args); - spin_unlock_irqrestore(&resume_reason_lock, flags); -} - /* Detects a suspend and clears all the previous wake up reasons*/ static int wakeup_reason_pm_event(struct notifier_block *notifier, unsigned long pm_event, void *unused) { - unsigned long flags; switch (pm_event) { case PM_SUSPEND_PREPARE: - spin_lock_irqsave(&resume_reason_lock, flags); - irqcount = 0; - suspend_abort = false; - spin_unlock_irqrestore(&resume_reason_lock, flags); /* monotonic time since boot */ last_monotime = ktime_get(); /* monotonic time since boot including the time spent in suspend */ last_stime = ktime_get_boottime(); + clear_wakeup_reasons(); break; case PM_POST_SUSPEND: /* monotonic time since boot */ curr_monotime = ktime_get(); /* monotonic time since boot including the time spent in suspend */ curr_stime = ktime_get_boottime(); + print_wakeup_sources(); break; default: break; @@ -185,31 +375,40 @@ static struct notifier_block wakeup_reason_pm_notifier_block = { .notifier_call = wakeup_reason_pm_event, }; -/* Initializes the sysfs parameter - * registers the pm_event notifier - */ int __init wakeup_reason_init(void) { - int retval; - spin_lock_init(&resume_reason_lock); - retval = register_pm_notifier(&wakeup_reason_pm_notifier_block); - if (retval) - printk(KERN_WARNING "[%s] failed to register PM notifier %d\n", - __func__, retval); + if (register_pm_notifier(&wakeup_reason_pm_notifier_block)) { + pr_warn("[%s] failed to register PM notifier\n", __func__); + goto fail; + } - wakeup_reason = kobject_create_and_add("wakeup_reasons", kernel_kobj); - if (!wakeup_reason) { - printk(KERN_WARNING "[%s] failed to create a sysfs kobject\n", - __func__); - return 1; + kobj = kobject_create_and_add("wakeup_reasons", kernel_kobj); + if (!kobj) { + pr_warn("[%s] failed to create a sysfs kobject\n", __func__); + goto fail_unregister_pm_notifier; } - retval = sysfs_create_group(wakeup_reason, &attr_group); - if (retval) { - kobject_put(wakeup_reason); - printk(KERN_WARNING "[%s] failed to create a sysfs group %d\n", - __func__, retval); + + if (sysfs_create_group(kobj, &attr_group)) { + pr_warn("[%s] failed to create a sysfs group\n", __func__); + goto fail_kobject_put; } + + wakeup_irq_nodes_cache = + kmem_cache_create("wakeup_irq_node_cache", + sizeof(struct wakeup_irq_node), 0, 0, NULL); + if (!wakeup_irq_nodes_cache) + goto fail_remove_group; + return 0; + +fail_remove_group: + sysfs_remove_group(kobj, &attr_group); +fail_kobject_put: + kobject_put(kobj); +fail_unregister_pm_notifier: + unregister_pm_notifier(&wakeup_reason_pm_notifier_block); +fail: + return 1; } late_initcall(wakeup_reason_init); From 4be750f3453166b571af21624536a187bd6dddfd Mon Sep 17 00:00:00 2001 From: Steve Muckle Date: Thu, 9 Apr 2020 14:06:59 -0700 Subject: [PATCH 092/136] ANDROID: GKI: enable CONFIG_ARM_PSCI_CPUIDLE Enable support for PSCI firmware based cpuidle. Bug: 153612740 Signed-off-by: Steve Muckle Change-Id: I78fb8a206f115eb409a893ded669df7d93460c68 --- arch/arm64/configs/gki_defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig index 1d19e02c5a8a..a2100c013d81 100644 --- a/arch/arm64/configs/gki_defconfig +++ b/arch/arm64/configs/gki_defconfig @@ -62,6 +62,7 @@ CONFIG_PM_WAKELOCKS_LIMIT=0 CONFIG_ENERGY_MODEL=y CONFIG_CPU_IDLE=y CONFIG_ARM_CPUIDLE=y +CONFIG_ARM_PSCI_CPUIDLE=y CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_TIMES=y CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y From 39d04aa080e2b700f19834c0b0007beddb4dcadd Mon Sep 17 00:00:00 2001 From: Gyeongtaek Lee Date: Fri, 10 Apr 2020 13:26:43 +0900 Subject: [PATCH 093/136] ANDROID: Kconfig.gki Add SND_SOC_TOPOLOGY Enable hidden config SND_SOC_TOPOLOGY need by SND_SOC=m Bug: 153682187 Change-Id: I47dabfaa6f0d138f78fbc1c9fc0d4ac3c7c73986 Signed-off-by: Gyeongtaek Lee --- init/Kconfig.gki | 1 + 1 file changed, 1 insertion(+) diff --git a/init/Kconfig.gki b/init/Kconfig.gki index 8c2f1890db27..7c73d07d991a 100644 --- a/init/Kconfig.gki +++ b/init/Kconfig.gki @@ -44,6 +44,7 @@ config GKI_HIDDEN_SND_SOC_CONFIGS select SND_SOC_GENERIC_DMAENGINE_PCM if (SND_SOC && SND) select SND_PCM_IEC958 select SND_SOC_COMPRESS if (SND_SOC && SND) + select SND_SOC_TOPOLOGY if (SND_SOC && SND) help Dummy config option used to enable hidden SND_SOC configs. These are normally selected implicitly when a module From fa41ab5369c735c4b2bfe547f7c176258238b7da Mon Sep 17 00:00:00 2001 From: Liangcai Fan Date: Fri, 10 Apr 2020 18:05:10 +0800 Subject: [PATCH 094/136] ANDROID: ABI/Whitelist: add display whitelist to unisoc whitelist Update whitelist for the symbols used by the unisoc display device and updates the ABI representation accordingly. add list: - hifi - display - iommu - sipc Leaf changes summary: 10 artifacts changed Changed leaf types summary: 0 leaf type changed Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 10 Added functions Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable 10 Added functions: [A] 'function void devm_gpio_free(device*, unsigned int)' [A] 'function int drm_connector_attach_content_protection_property(drm_connector*, bool)' [A] 'function int drm_dp_calc_pbn_mode(int, int)' [A] 'function bool drm_hdcp_check_ksvs_revoked(drm_device*, u8*, u32)' [A] 'function void drm_hdcp_update_content_protection(drm_connector*, u64)' [A] 'function s32 i2c_smbus_write_byte(const i2c_client*, u8)' [A] 'function void mmc_cqe_request_done(mmc_host*, mmc_request*)' [A] 'function int of_hwspin_lock_get_id_byname(device_node*, const char*)' [A] 'function int snd_pcm_hw_constraint_mask64(snd_pcm_runtime*, int, long long unsigned int)' [A] 'function virtqueue* vring_new_virtqueue(unsigned int, unsigned int, unsigned int, virtio_device*, bool, bool, void*, void ()*, void ()*, const char*)' Bug: 147075469 Change-Id: I7d0388496e8ce33c07188ace364858aba21227ec Signed-off-by: Liangcai Fan --- abi_gki_aarch64.xml | 43958 +++++++++++++++-------------- abi_gki_aarch64_unisoc_whitelist | 119 + 2 files changed, 22139 insertions(+), 21938 deletions(-) diff --git a/abi_gki_aarch64.xml b/abi_gki_aarch64.xml index b7c297937251..da2338089bd8 100644 --- a/abi_gki_aarch64.xml +++ b/abi_gki_aarch64.xml @@ -764,6 +764,7 @@ + @@ -1001,6 +1002,7 @@ + @@ -1041,6 +1043,7 @@ + @@ -1107,6 +1110,8 @@ + + @@ -1427,6 +1432,7 @@ + @@ -1828,6 +1834,7 @@ + @@ -2028,6 +2035,7 @@ + @@ -2729,6 +2737,7 @@ + @@ -3339,6 +3348,7 @@ + @@ -12985,26 +12995,13 @@ - - - - - - - - - - - - - - + @@ -13033,18 +13030,18 @@ - + - + - + - - + + @@ -13055,22 +13052,22 @@ - - + + - + - + - + @@ -13081,7 +13078,7 @@ - + @@ -13089,12 +13086,12 @@ - + - + @@ -13102,20 +13099,20 @@ - + - + - + - + @@ -13192,96 +13189,96 @@ - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - - + + - + - - + + - - - + + + - + - - - + + + - + @@ -13293,14 +13290,14 @@ - + - + @@ -13308,13 +13305,13 @@ - + - + @@ -13334,33 +13331,33 @@ - - - + + + - + - - - - + + + + - - - + + + - - + + @@ -13368,67 +13365,67 @@ - + - - + + - - + + - + - + - - + + - - + + - - + + - + - + - - + + - + - - + + - + @@ -13445,16 +13442,16 @@ - + - + - + - + @@ -13466,7 +13463,7 @@ - + @@ -13474,59 +13471,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -13538,16 +13535,16 @@ - - + + - + - + - + @@ -13567,279 +13564,279 @@ - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - + + - - + + - - + + - - + + - + + + + + - + + + + + + + - + - - - - - + + - - - - + + - - - - - - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -13849,54 +13846,54 @@ - + - + - + - + - + - + - + - + - + - + - - + + @@ -13906,124 +13903,124 @@ - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - + + + + + + + + - + - + - + - + + + + + - + + - - + + - - - - - - - - + + + - - + + - + - + @@ -14032,14 +14029,14 @@ - + - - + + @@ -14049,16 +14046,16 @@ - + - + - + @@ -14066,45 +14063,45 @@ - + - + - - + + - + - + - - + + - + - - + + - + - + @@ -14119,19 +14116,19 @@ - + - + - + - + @@ -14143,22 +14140,22 @@ - + - + - + - + @@ -14167,7 +14164,7 @@ - + @@ -14197,10 +14194,10 @@ - + - + @@ -14211,7 +14208,7 @@ - + @@ -14222,22 +14219,22 @@ - + - + - + - + @@ -14246,7 +14243,7 @@ - + @@ -14257,10 +14254,10 @@ - + - + @@ -14274,18 +14271,18 @@ - + - + - + - + @@ -14297,33 +14294,33 @@ - + - + - + - + - + - + - - + + @@ -14331,14 +14328,14 @@ - + - - + + @@ -14349,24 +14346,24 @@ - + - + - + - + - + - + @@ -14378,7 +14375,7 @@ - + @@ -14390,7 +14387,7 @@ - + @@ -14398,37 +14395,37 @@ - + - + - - - - - + + + + + - - - - - - + + + + + + - + - + @@ -14455,7 +14452,7 @@ - + @@ -14464,7 +14461,7 @@ - + @@ -14475,55 +14472,55 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + @@ -14531,77 +14528,77 @@ - - + + - + - - + + - - + + - - + + - - - + + + - - + + - - + + - - - - + + + + - - + + - + + + + + + + + + + + + + + + - - - - - - - - - - - - + + - - - - - - + + @@ -14619,7 +14616,7 @@ - + @@ -14627,15 +14624,15 @@ - + - + - - + + - + @@ -14645,7 +14642,7 @@ - + @@ -14659,7 +14656,7 @@ - + @@ -14671,7 +14668,7 @@ - + @@ -14685,7 +14682,7 @@ - + @@ -14707,131 +14704,131 @@ - + - + - + - + - - + + - + - + - + - - + + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - - + + - + - + - - + + - + - + @@ -14839,7 +14836,7 @@ - + @@ -14875,28 +14872,28 @@ - + - + - + - + - + - + - + - + @@ -14905,7 +14902,7 @@ - + @@ -14923,22 +14920,22 @@ - + - + - + - + - + - + @@ -15022,13 +15019,13 @@ - + - + - + @@ -15040,25 +15037,25 @@ - + - + - + - + - + - + @@ -15067,37 +15064,37 @@ - + - + - + - + - + - + - + @@ -15106,10 +15103,10 @@ - + - + @@ -15121,13 +15118,13 @@ - + - + - + @@ -15142,37 +15139,37 @@ - + - + - + - + - + - + - + - + @@ -15181,19 +15178,19 @@ - + - + - + - + - + @@ -15214,7 +15211,7 @@ - + @@ -15222,7 +15219,7 @@ - + @@ -15230,8 +15227,8 @@ - - + + @@ -15302,214 +15299,214 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -15517,45 +15514,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -15567,7 +15564,7 @@ - + @@ -15579,20 +15576,20 @@ - + - + - + - + - - - + + + @@ -15612,7 +15609,7 @@ - + @@ -15620,34 +15617,34 @@ - + - + - + - + - + - + - + - + - + - - + + @@ -15655,8 +15652,8 @@ - - + + @@ -15664,8 +15661,8 @@ - - + + @@ -15688,14 +15685,14 @@ - - + + - - + + @@ -15703,8 +15700,8 @@ - - + + @@ -15715,8 +15712,8 @@ - - + + @@ -15730,7 +15727,7 @@ - + @@ -15804,12 +15801,12 @@ - + - + @@ -15839,7 +15836,7 @@ - + @@ -15865,7 +15862,7 @@ - + @@ -15873,7 +15870,7 @@ - + @@ -15890,21 +15887,21 @@ - + - + - + - + @@ -15927,18 +15924,18 @@ - + - + - + - + @@ -15947,7 +15944,7 @@ - + @@ -15968,10 +15965,10 @@ - + - + @@ -15988,7 +15985,7 @@ - + @@ -15996,15 +15993,15 @@ - + - + - + - + @@ -16014,9 +16011,9 @@ - + - + @@ -16026,39 +16023,39 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -16067,18 +16064,18 @@ - + - + - + - + @@ -16108,10 +16105,10 @@ - + - + @@ -16132,72 +16129,72 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -16235,7 +16232,7 @@ - + @@ -16243,7 +16240,7 @@ - + @@ -16281,7 +16278,7 @@ - + @@ -16295,7 +16292,7 @@ - + @@ -16306,7 +16303,7 @@ - + @@ -16326,7 +16323,7 @@ - + @@ -16334,7 +16331,7 @@ - + @@ -16363,7 +16360,7 @@ - + @@ -16374,14 +16371,14 @@ - + - - + + @@ -16410,7 +16407,7 @@ - + @@ -16418,9 +16415,31 @@ - + + + + + + + + + + + + + + + + + + + + + + + - + @@ -16428,7 +16447,7 @@ - + @@ -16436,7 +16455,7 @@ - + @@ -16497,7 +16516,7 @@ - + @@ -16510,7 +16529,7 @@ - + @@ -16526,9 +16545,9 @@ - + - + @@ -16539,7 +16558,7 @@ - + @@ -16558,47 +16577,25 @@ - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - + @@ -16612,13 +16609,13 @@ - + - + - + @@ -16626,177 +16623,177 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -16816,7 +16813,7 @@ - + @@ -16834,7 +16831,7 @@ - + @@ -16848,7 +16845,7 @@ - + @@ -16859,10 +16856,10 @@ - + - + @@ -16879,7 +16876,7 @@ - + @@ -16950,7 +16947,7 @@ - + @@ -16979,7 +16976,7 @@ - + @@ -16993,7 +16990,7 @@ - + @@ -17007,17 +17004,17 @@ - + - + - + @@ -17025,10 +17022,10 @@ - + - + @@ -17039,30 +17036,30 @@ - + - + - + - + - + - + - + @@ -17071,56 +17068,56 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -17132,29 +17129,29 @@ - + - + - + - + - + - + - + - + @@ -17166,12 +17163,12 @@ - + - + - + @@ -17183,29 +17180,29 @@ - + - + - + - + - + - + - + - + @@ -17214,23 +17211,23 @@ - + - + - + - + - + - + @@ -17239,10 +17236,10 @@ - + - + @@ -17250,7 +17247,7 @@ - + @@ -17261,7 +17258,7 @@ - + @@ -17290,7 +17287,7 @@ - + @@ -17307,7 +17304,7 @@ - + @@ -17330,7 +17327,7 @@ - + @@ -17341,10 +17338,10 @@ - + - + @@ -17373,7 +17370,7 @@ - + @@ -17390,15 +17387,15 @@ - + - + - + - + @@ -17433,16 +17430,16 @@ - + - + - + @@ -17453,7 +17450,7 @@ - + @@ -17467,27 +17464,27 @@ - + - + - + - + - + - + - + - + @@ -17495,10 +17492,10 @@ - + - + @@ -17506,27 +17503,27 @@ - + - + - + - + - + - + - + @@ -17534,10 +17531,10 @@ - + - + @@ -17545,10 +17542,10 @@ - + - + @@ -17559,9 +17556,9 @@ - + - + @@ -17570,27 +17567,27 @@ - + - - - + + + - + - + - + - + @@ -17602,10 +17599,10 @@ - + - + @@ -17620,10 +17617,10 @@ - + - + @@ -17664,15 +17661,15 @@ - + - + - + @@ -17683,10 +17680,10 @@ - + - + @@ -17695,18 +17692,18 @@ - + - - + + - + - + @@ -17714,10 +17711,10 @@ - + - + @@ -17731,11 +17728,11 @@ - + - - + + @@ -17743,242 +17740,242 @@ - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + - + @@ -17998,712 +17995,712 @@ - + - - - + + + - - - + + + + + + + - + + - + + - + + - - - - - - - - + + + + + + - + + - - - - - - - + - - - - - + + + + + - - + + - - + + - - - + + + - - + + - - + + - + - + - - - - + + + + + + + + + + + + + + - - - - - - - + - - - - - + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + + + + + - + - - + + - - - - - - - + + - - - + + + - - - + + + + + + + + - + - + - + - + - - + + - + - - - - - - - + + + + + + + - + - - + + - + + - - + - + + - + - + + - - + + - - - + + - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - + + - + + + + + + - - + + - - + + - - + + + - - - + + - + - - + + + - - + + + - - - - - - - - + - - + + - - + + + + + + + - - + + - + + - + + - - - - + + - + + + - - - - - - - - + - - + + - - + + - + - + + + + + + - + + + + - - - - - - - - - - + + - + - + - + - - - + + + - - + + - + - - + + + + + + + - - - + + + + - - - + + + + + + + - - - - - - - - - - - + + + + + + - - + - - - - - - + + - - + + - - + + - + - - - + + + + + + + - + + - - + + - - + + - + - - - - - + + + + + - - + + + - + - - - + + - - - - - - + + + + + + - - + + - - - - - - + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - + - + - + - + - + - + - + - + @@ -18718,7 +18715,7 @@ - + @@ -18732,11 +18729,11 @@ - - + + - + @@ -18750,9 +18747,9 @@ - + - + @@ -18773,25 +18770,25 @@ - + - + - + - + - + - + @@ -18800,55 +18797,55 @@ - - - + + + - + - + - + - + - + - + - + - + - + - - + + - + @@ -18892,7 +18889,7 @@ - + @@ -18903,7 +18900,7 @@ - + @@ -18914,19 +18911,19 @@ - + - + - + @@ -18934,15 +18931,15 @@ - + - + - + @@ -18972,7 +18969,7 @@ - + @@ -18992,7 +18989,7 @@ - + @@ -19015,10 +19012,10 @@ - - + + - + @@ -19030,7 +19027,7 @@ - + @@ -19048,125 +19045,125 @@ - - + + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - + - - + + + - - - + + - + - + - - + + - - + + - - - + + + - - - + + + - + @@ -19174,86 +19171,86 @@ - + - - + + - - + + - - + + - - + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -19261,13 +19258,13 @@ - + - + - + @@ -19278,7 +19275,7 @@ - + @@ -19295,70 +19292,70 @@ - + - + - + - + - + - + - + - + - + - - - - - + + + + + - + - - + + - + - - + + - + - + @@ -19367,24 +19364,24 @@ - - + + - + - + - + - + - - + + @@ -19392,31 +19389,31 @@ - + - + - + - + - + - + - + - + - + @@ -19425,94 +19422,94 @@ - + - + - - + + - - + + - + - + - + - + - + - - + + - + - - + + - + - - + + - + - + - + - + - + @@ -19520,7 +19517,7 @@ - + @@ -19538,7 +19535,7 @@ - + @@ -19549,22 +19546,22 @@ - + - + - + - + - + @@ -19584,12 +19581,12 @@ - + - + @@ -19609,119 +19606,119 @@ - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + @@ -19735,29 +19732,29 @@ - + - + - + - + - + - + @@ -19811,7 +19808,7 @@ - + @@ -19900,10 +19897,10 @@ - + - + @@ -20032,7 +20029,7 @@ - + @@ -20042,7 +20039,7 @@ - + @@ -20059,11 +20056,11 @@ - + - + @@ -20077,7 +20074,7 @@ - + @@ -20130,13 +20127,13 @@ - + - + @@ -20205,7 +20202,7 @@ - + @@ -20541,7 +20538,7 @@ - + @@ -21133,11 +21130,11 @@ - + - + @@ -21148,11 +21145,11 @@ - + - + @@ -21161,7 +21158,7 @@ - + @@ -21284,7 +21281,7 @@ - + @@ -21316,7 +21313,7 @@ - + @@ -21362,7 +21359,7 @@ - + @@ -21380,7 +21377,7 @@ - + @@ -21408,61 +21405,61 @@ - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -21471,7 +21468,7 @@ - + @@ -21491,7 +21488,7 @@ - + @@ -21517,11 +21514,11 @@ - + - + @@ -21536,8 +21533,8 @@ - - + + @@ -21545,19 +21542,19 @@ - + - - + + - - - + + + @@ -21572,7 +21569,7 @@ - + @@ -21660,22 +21657,22 @@ - - + + - + - + - + @@ -21687,40 +21684,40 @@ - + - + - + - + - + - + - - + + @@ -21751,7 +21748,7 @@ - + @@ -21761,7 +21758,7 @@ - + @@ -21795,7 +21792,7 @@ - + @@ -21812,7 +21809,7 @@ - + @@ -21849,7 +21846,7 @@ - + @@ -22011,13 +22008,13 @@ - + - + @@ -22025,7 +22022,7 @@ - + @@ -22036,7 +22033,7 @@ - + @@ -22084,7 +22081,7 @@ - + @@ -22194,7 +22191,7 @@ - + @@ -22212,12 +22209,12 @@ - + - + @@ -22263,7 +22260,7 @@ - + @@ -22278,7 +22275,7 @@ - + @@ -22304,7 +22301,7 @@ - + @@ -22314,7 +22311,7 @@ - + @@ -22338,7 +22335,7 @@ - + @@ -22350,28 +22347,28 @@ - - + + - - + + - - + + - - - + + + - - + + - + @@ -22388,92 +22385,92 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -22604,50 +22601,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -22673,15 +22670,15 @@ - + - + - + - + @@ -22705,36 +22702,36 @@ - + - - + + - + - - + + - + - - + + - + @@ -22793,28 +22790,47 @@ + + + + + + + + + + + + + + + + + + + - + - + - + - + @@ -22826,14 +22842,14 @@ - + - - + + @@ -22886,7 +22902,7 @@ - + @@ -22986,7 +23002,7 @@ - + @@ -23002,7 +23018,7 @@ - + @@ -23021,7 +23037,7 @@ - + @@ -23040,13 +23056,13 @@ - + - + @@ -23067,19 +23083,19 @@ - + - + - + - + @@ -23108,10 +23124,10 @@ - + - + @@ -23144,7 +23160,7 @@ - + @@ -23219,29 +23235,29 @@ - + - + - + - + - + @@ -23272,7 +23288,7 @@ - + @@ -23284,7 +23300,7 @@ - + @@ -23393,7 +23409,7 @@ - + @@ -23459,7 +23475,7 @@ - + @@ -23490,7 +23506,7 @@ - + @@ -23550,7 +23566,7 @@ - + @@ -23611,7 +23627,7 @@ - + @@ -23637,7 +23653,7 @@ - + @@ -23654,17 +23670,22 @@ - + - + + + + + + @@ -23688,7 +23709,7 @@ - + @@ -23697,7 +23718,7 @@ - + @@ -23787,7 +23808,7 @@ - + @@ -23796,7 +23817,7 @@ - + @@ -24349,7 +24370,7 @@ - + @@ -24610,7 +24631,7 @@ - + @@ -24992,7 +25013,7 @@ - + @@ -25199,7 +25220,7 @@ - + @@ -25979,7 +26000,7 @@ - + @@ -26165,10 +26186,10 @@ - + - + @@ -26371,7 +26392,7 @@ - + @@ -26598,7 +26619,7 @@ - + @@ -27823,7 +27844,7 @@ - + @@ -27913,7 +27934,7 @@ - + @@ -28667,7 +28688,7 @@ - + @@ -28725,7 +28746,7 @@ - + @@ -28767,7 +28788,7 @@ - + @@ -28889,6 +28910,11 @@ + + + + + @@ -28910,7 +28936,7 @@ - + @@ -29283,7 +29309,7 @@ - + @@ -29297,7 +29323,7 @@ - + @@ -29539,7 +29565,7 @@ - + @@ -29580,7 +29606,9 @@ - + + + @@ -29594,17 +29622,35 @@ - - - + + + + + - + - + - + + + + + + + + + + + + + + + + + @@ -29636,15 +29682,15 @@ - + - + - + - + @@ -29653,7 +29699,7 @@ - + @@ -29665,29 +29711,29 @@ - + - + - + - + - + - + - + - + @@ -29716,30 +29762,30 @@ - + - + - + - + - + - + @@ -29748,67 +29794,67 @@ - + - + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - + + + - + - - + + - + - + - + - + @@ -29816,23 +29862,23 @@ - - + + - + - + - + @@ -29840,57 +29886,57 @@ - + - + - + - + - + - + - - - - - - - + + - - + + + + + + + - - + + - + @@ -29900,30 +29946,30 @@ - - - - - + + + + + - + - - + + - + - + @@ -29933,7 +29979,7 @@ - + @@ -29949,7 +29995,7 @@ - + @@ -29978,10 +30024,10 @@ - + - + @@ -29997,9 +30043,9 @@ - - - + + + @@ -30019,17 +30065,17 @@ - + - + - + @@ -30050,16 +30096,16 @@ - - + + - + - + - + @@ -30067,58 +30113,58 @@ - + - - - - - + + + + + - - - + + + - - - - + + + + - - + + - - - + + + - - + + - + - + - + - - - - + + + + @@ -30136,7 +30182,7 @@ - + @@ -30162,7 +30208,7 @@ - + @@ -30170,7 +30216,7 @@ - + @@ -30185,9 +30231,9 @@ - + - + @@ -30198,7 +30244,7 @@ - + @@ -30212,10 +30258,10 @@ - - + + - + @@ -30223,7 +30269,7 @@ - + @@ -30234,7 +30280,7 @@ - + @@ -30254,14 +30300,14 @@ - + - + @@ -30286,7 +30332,7 @@ - + @@ -30309,31 +30355,31 @@ - - - - - - - - - - - - + + + + + + + + + + + + - + - - + + - + @@ -30342,10 +30388,10 @@ - + - + @@ -30408,13 +30454,13 @@ - + - + - + @@ -30423,7 +30469,7 @@ - + @@ -30434,7 +30480,7 @@ - + @@ -30442,23 +30488,23 @@ - + - + - + - + - + - + - + @@ -30508,7 +30554,7 @@ - + @@ -30519,32 +30565,32 @@ - + - + - + - + - + - + - + - + - + - + @@ -30564,18 +30610,18 @@ - + - + - + - + - + @@ -30586,7 +30632,7 @@ - + @@ -30595,7 +30641,7 @@ - + @@ -30618,7 +30664,7 @@ - + @@ -30632,17 +30678,17 @@ - + - - - - - - + + + + + + @@ -30663,7 +30709,7 @@ - + @@ -30744,7 +30790,7 @@ - + @@ -30758,7 +30804,7 @@ - + @@ -30790,7 +30836,7 @@ - + @@ -30807,13 +30853,13 @@ - + - + - + @@ -30821,28 +30867,28 @@ - - + + - + - + - + - + @@ -30900,35 +30946,35 @@ - + - + - - + + - - + + - + - + - + @@ -30937,58 +30983,58 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -31002,24 +31048,24 @@ - + - + - + - + - + @@ -31046,28 +31092,28 @@ - + - + - + - + - + - + @@ -31100,28 +31146,28 @@ - + - + - + - + - + - + - + @@ -31145,7 +31191,7 @@ - + @@ -31159,13 +31205,13 @@ - + - + @@ -31173,10 +31219,10 @@ - + - + @@ -31193,7 +31239,7 @@ - + @@ -31202,10 +31248,10 @@ - + - + @@ -31216,7 +31262,7 @@ - + @@ -31237,7 +31283,7 @@ - + @@ -31258,19 +31304,19 @@ - + - + - + @@ -31302,18 +31348,18 @@ - + - + - + - + @@ -31328,7 +31374,7 @@ - + @@ -31339,47 +31385,47 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -31390,206 +31436,206 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - - - + + + - + - + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - + + + - - + + - + - - + + - - + + - - + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - + - + - + - + - - + + - + @@ -31600,9 +31646,9 @@ - + - + @@ -31611,132 +31657,132 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -31751,7 +31797,7 @@ - + @@ -31764,7 +31810,7 @@ - + @@ -31838,57 +31884,57 @@ - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - - + + @@ -31898,64 +31944,64 @@ - + - + - - - + + + - + - - - - - + + + + + - - + + - - - - - - - - - - - - - - - + + + - + + + + + + + + + + + + + - + @@ -31972,56 +32018,56 @@ - + - + - - + + - + - + - - - - - + + + + + - + - - + + - + - + - + - + @@ -32030,72 +32076,77 @@ - + - + - + - + - + - - - - - + + + + + - + - + + + + + + - - - + + + - + - + - + - + - - + + - + @@ -32115,8 +32166,8 @@ - - + + @@ -32124,7 +32175,7 @@ - + @@ -32136,7 +32187,7 @@ - + @@ -32150,14 +32201,14 @@ - - + + - + @@ -32168,9 +32219,9 @@ - - - + + + @@ -32192,7 +32243,7 @@ - + @@ -32200,25 +32251,32 @@ - + + + + + + + + - + - - - - - + + + + + - + @@ -32226,10 +32284,10 @@ - + - + @@ -32241,7 +32299,7 @@ - + @@ -32259,7 +32317,7 @@ - + @@ -32271,33 +32329,33 @@ - + - + - + - + - + - + - + - + - + - + @@ -32306,7 +32364,7 @@ - + @@ -32320,13 +32378,13 @@ - + - + - + @@ -32353,19 +32411,19 @@ - + - + - + - + @@ -32380,7 +32438,7 @@ - + @@ -32389,13 +32447,13 @@ - + - + @@ -32404,9 +32462,9 @@ - + - + @@ -32421,7 +32479,7 @@ - + @@ -32448,13 +32506,13 @@ - + - + @@ -32475,7 +32533,7 @@ - + @@ -32513,7 +32571,7 @@ - + @@ -32530,21 +32588,21 @@ - + - + - + - + - + @@ -32559,7 +32617,7 @@ - + @@ -32568,39 +32626,39 @@ - + - + - + - + - + - + - + - - + + @@ -32608,52 +32666,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -32662,274 +32720,274 @@ - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - - + + - - + + - - - + + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - + + - - - - - - - + - - - - - + + + + + + - - - - - + + + + - - - + + + + + - - - + + + + + - - - - + + + + + - - + + + + + - - + + + + + + - - + + + + + - - + + + - + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - - + + + + - - - - + + + + - - + + - - + + - + - + - + @@ -32957,68 +33015,68 @@ - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + @@ -33027,7 +33085,7 @@ - + @@ -33042,66 +33100,66 @@ - + - - + + - - - + + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + @@ -33113,7 +33171,7 @@ - + @@ -33122,7 +33180,7 @@ - + @@ -33133,10 +33191,10 @@ - + - + @@ -33145,7 +33203,7 @@ - + @@ -33156,7 +33214,7 @@ - + @@ -33165,7 +33223,7 @@ - + @@ -33201,16 +33259,16 @@ - + - + - + - + @@ -33222,13 +33280,13 @@ - + - + - + @@ -33240,19 +33298,19 @@ - + - + - + - + - + @@ -33267,7 +33325,7 @@ - + @@ -33282,16 +33340,16 @@ - + - + - + @@ -33305,7 +33363,7 @@ - + @@ -33319,27 +33377,27 @@ - + - + - + - + - + - + - + - + @@ -33354,33 +33412,33 @@ - + - + - + - + - + - + - + - + @@ -33388,7 +33446,7 @@ - + @@ -33396,32 +33454,32 @@ - + - + - + - + - + - + - + - + - + - + @@ -33435,18 +33493,18 @@ - + - + - + - + - + @@ -33454,25 +33512,25 @@ - + - + - + - + - + @@ -33480,19 +33538,19 @@ - + - + - + - + @@ -33500,7 +33558,7 @@ - + @@ -33520,7 +33578,7 @@ - + @@ -33531,9 +33589,9 @@ - + - + @@ -33548,48 +33606,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -33598,25 +33656,25 @@ - + - + - + - + - + - + - + @@ -33643,7 +33701,7 @@ - + @@ -33655,7 +33713,7 @@ - + @@ -33670,14 +33728,14 @@ - + - + @@ -33685,15 +33743,15 @@ - + - + - + @@ -33708,9 +33766,9 @@ - + - + @@ -33722,239 +33780,239 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - + + - - + - - + + + - - - + + + - - - - + + - - - + + - + + - - + + + - - - + + + - - - + + + + + + + - + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + - - + + - - - + + + - + - + - - + + - + - + @@ -33969,71 +34027,71 @@ - + - + - + - + - + - + - + - + - - + + - - + + - - - + + + - + - + - + - + @@ -34045,7 +34103,7 @@ - + @@ -34066,7 +34124,7 @@ - + @@ -34086,41 +34144,41 @@ - + - + - + - + - + - + - + - + @@ -34135,15 +34193,15 @@ - + - - + + - + @@ -34157,10 +34215,10 @@ - + - + @@ -34172,9 +34230,9 @@ - + - + @@ -34183,13 +34241,13 @@ - + - + - + @@ -34198,7 +34256,7 @@ - + @@ -34206,13 +34264,13 @@ - + - + @@ -34228,13 +34286,13 @@ - + - + @@ -34251,28 +34309,28 @@ - + - + - + - + - + - + - + @@ -34284,13 +34342,13 @@ - + - + @@ -34299,7 +34357,7 @@ - + @@ -34313,59 +34371,59 @@ - + - + - + - + - + - + - + - + - + - - - - - - - - - - + + + + + + + + + + - + - - + + @@ -34373,51 +34431,51 @@ - - + + - + - + - + - - + + - - - + + + - - + + - - + + - + - - + + - + - + @@ -34425,13 +34483,13 @@ - + - + @@ -34440,7 +34498,7 @@ - + @@ -34458,7 +34516,7 @@ - + @@ -34466,19 +34524,19 @@ - + - + - + - + - + @@ -34487,7 +34545,7 @@ - + @@ -34495,18 +34553,18 @@ - + - + - + - + @@ -34518,87 +34576,87 @@ - - - - - - - - + + + + + + + + - + - + - + - + - + - - - - + + + + - + - + - - + + - - + + - + - + - + - + - + - - - + + + - - + + @@ -34606,8 +34664,8 @@ - - + + @@ -34618,50 +34676,50 @@ - + - - + + - + - + - + - + - + - + - - + + @@ -34672,7 +34730,7 @@ - + @@ -34683,7 +34741,7 @@ - + @@ -34695,7 +34753,7 @@ - + @@ -34709,10 +34767,10 @@ - + - + @@ -34720,26 +34778,26 @@ - + - + - + - + - + - + - - + + @@ -34897,15 +34955,15 @@ - + - + - + @@ -34913,21 +34971,21 @@ - + - + - + - + - + - + @@ -34947,7 +35005,7 @@ - + @@ -34967,7 +35025,7 @@ - + @@ -34984,9 +35042,9 @@ - + - + @@ -34998,33 +35056,33 @@ - - + + - + - + - + - + - + - + - + - + @@ -35034,7 +35092,7 @@ - + @@ -35051,57 +35109,57 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -35113,7 +35171,7 @@ - + @@ -35121,21 +35179,21 @@ - + - + - + - + @@ -35153,7 +35211,7 @@ - + @@ -35163,102 +35221,102 @@ - - - - - - - + - - - - - + + + + + + + + - - - + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - + + + + + - + - + - + - + - + - + - + - + - + - - + + - + @@ -35270,258 +35328,258 @@ - - + + - + - + - + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - + - + - + - - + + - + - + - - - - - - - - - - - - - - + + - - - - - - - - + + + + - + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - + - + - - - - - - - - - - - - - - + + + - - + + + + - - + + - + + + + + + + + + + - - + + - - + + - + - - - - - - - - - - - - - - - - + + + + + - + + + - - + + - - + - - + + - + + + + + + + + + + + - - + + - + @@ -35531,43 +35589,43 @@ - - + + - - + + - + - - + + - - + + - + - + - + @@ -35575,35 +35633,35 @@ - - + + - - + + - - + + - + - - + + - - + + - + @@ -35611,60 +35669,60 @@ - - + + - - + + - + - + - - + + - - - - + + + + - - + + - + - + - + - + @@ -35676,45 +35734,45 @@ - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + @@ -35722,32 +35780,32 @@ - + - + - + - + - + - + - + - + - + @@ -35773,7 +35831,7 @@ - + @@ -35781,25 +35839,25 @@ - + - + - + - + - + @@ -35807,12 +35865,12 @@ - + - + @@ -35821,13 +35879,13 @@ - + - + @@ -35836,16 +35894,16 @@ - + - + - + @@ -35869,13 +35927,13 @@ - + - + - + @@ -35887,24 +35945,24 @@ - + - + - + - + - + @@ -35952,19 +36010,19 @@ - + - + - + - + @@ -36027,10 +36085,10 @@ - + - + @@ -36039,7 +36097,7 @@ - + @@ -36153,13 +36211,13 @@ - + - + @@ -36171,16 +36229,16 @@ - + - + - + @@ -36195,15 +36253,15 @@ - + - + - + @@ -36212,7 +36270,7 @@ - + @@ -36220,34 +36278,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -36256,10 +36314,10 @@ - + - + @@ -36279,37 +36337,37 @@ - + - + - + - + - + - + - + - + - - + + - + @@ -36317,294 +36375,294 @@ - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + + - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - + + + - - + + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + - + + + + + + + - - - + + + - + + - + + - + + + + + + + + + + + + + + - + - + - + - + - - + + - + - - - - + + + + - + - + @@ -36614,31 +36672,31 @@ - + - - - + + + - + - + - + - + @@ -36646,7 +36704,7 @@ - + @@ -36658,19 +36716,19 @@ - + - + - + - + @@ -36685,42 +36743,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -36733,19 +36791,19 @@ - + - + - + - - + + @@ -36756,22 +36814,22 @@ - + - + - + - + @@ -36779,133 +36837,133 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -36919,13 +36977,13 @@ - + - + - + @@ -36933,7 +36991,7 @@ - + @@ -36941,16 +36999,16 @@ - + - + - + - + @@ -36992,18 +37050,18 @@ - + - + - + - + @@ -37015,7 +37073,7 @@ - + @@ -37038,21 +37096,21 @@ - + - + - + - + - + @@ -37091,13 +37149,13 @@ - + - + - + @@ -37121,7 +37179,7 @@ - + @@ -37142,10 +37200,10 @@ - - + + - + @@ -37154,16 +37212,16 @@ - + - + - + @@ -37181,18 +37239,18 @@ - + - - - + + + - + @@ -37203,82 +37261,82 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - + - + - + @@ -37293,19 +37351,19 @@ - + - + - + - + @@ -37317,30 +37375,30 @@ - + - + - + - + - - - + + + - + - + @@ -37351,156 +37409,156 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - + + - - + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - + - - + - + + - - + + - - + + - - + - + + + + + + + + + + + + + + + + + + + + + @@ -37508,31 +37566,31 @@ - + - + - + - - + + - + - + @@ -37548,19 +37606,19 @@ - - + + - + - + - + - + @@ -37575,7 +37633,7 @@ - + @@ -37584,29 +37642,29 @@ - + - + - + - + - + - + - + - + - + @@ -37627,7 +37685,7 @@ - + @@ -37636,81 +37694,81 @@ - - - + + + + + - - - - - - + + + + - - + + - - + + - - + + - - + + - - - - + + + + - - + + - - + + - + - + - + - + - + - + - + - + @@ -37725,13 +37783,13 @@ - - - - - + + + + + - + @@ -37748,13 +37806,13 @@ - + - + @@ -37770,7 +37828,7 @@ - + @@ -37786,62 +37844,62 @@ - + - + - + - + - + - + - - + + - + - - + + - - + + - + - + @@ -37855,8 +37913,8 @@ - - + + @@ -37868,69 +37926,69 @@ - - + + - - + + - - - + + + - - + + - - + + - - + + - + - + - + - - + + - - + + - + - + - + @@ -37939,7 +37997,7 @@ - + @@ -37978,19 +38036,19 @@ - + - + - + - + @@ -37999,21 +38057,21 @@ - + - + - + - + - + @@ -38022,10 +38080,10 @@ - + - + @@ -38045,40 +38103,40 @@ - + - + - + - + - + - + - + - + - + - + @@ -38099,13 +38157,13 @@ - + - + @@ -38114,15 +38172,15 @@ - + - + - + - + @@ -38131,73 +38189,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -38206,20 +38264,20 @@ - + - + - + - + - + - + @@ -38231,15 +38289,15 @@ - + - + - + @@ -38247,43 +38305,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -38304,7 +38362,7 @@ - + @@ -38314,117 +38372,117 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - + + - - - - + + + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - + - + - + - + - + - + - + @@ -38433,7 +38491,7 @@ - + @@ -38448,7 +38506,7 @@ - + @@ -38460,21 +38518,21 @@ - + - + - - + + - + - + @@ -38483,46 +38541,46 @@ - + - + - + - - + + - + - - + + - + - - + + - + - + - + @@ -38533,137 +38591,137 @@ - + - - + + - + - + - + - - + + - + - + - + - + - - + + - - + + - + - + - - + + - + - - + + - - + + - - - - - + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -38687,24 +38745,24 @@ - + - + - + - + - + - + @@ -38713,7 +38771,7 @@ - + @@ -38739,18 +38797,18 @@ - + - + - + - + - + @@ -38759,27 +38817,27 @@ - + - + - + - + - + - + - + @@ -38794,16 +38852,16 @@ - + - + - + - + @@ -38818,95 +38876,95 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -38923,18 +38981,18 @@ - + - + - + - + @@ -38955,10 +39013,10 @@ - + - + @@ -38966,7 +39024,7 @@ - + @@ -38977,45 +39035,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -39026,10 +39084,10 @@ - + - + @@ -39052,15 +39110,15 @@ - + - + - + @@ -39090,12 +39148,12 @@ - + - + @@ -39116,7 +39174,7 @@ - + @@ -39124,84 +39182,84 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -39209,34 +39267,34 @@ - + - + - + - + - + - + - + - + - + @@ -39286,7 +39344,7 @@ - + @@ -39295,18 +39353,18 @@ - + - + - + - + @@ -39316,30 +39374,30 @@ - + - + - + - + - + - + - + - + - + @@ -39353,7 +39411,7 @@ - + @@ -39367,15 +39425,15 @@ - + - + - + @@ -39384,7 +39442,7 @@ - + @@ -39398,7 +39456,7 @@ - + @@ -39410,12 +39468,12 @@ - + - + @@ -39424,32 +39482,32 @@ - + - + - + - + - + - + - + - + - + @@ -39491,77 +39549,77 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -39587,10 +39645,10 @@ - + - + @@ -39604,7 +39662,7 @@ - + @@ -39618,10 +39676,10 @@ - + - + @@ -39647,10 +39705,10 @@ - + - + @@ -39667,16 +39725,16 @@ - + - + - + @@ -39684,13 +39742,13 @@ - + - + - + @@ -39704,13 +39762,13 @@ - + - + - + @@ -39721,13 +39779,13 @@ - + - + - + @@ -39738,18 +39796,18 @@ - + - + - + - + - + @@ -39775,10 +39833,10 @@ - + - + @@ -39789,31 +39847,31 @@ - + - + - + - + - + - + - + - + - + @@ -39822,42 +39880,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -39866,28 +39924,28 @@ - + - + - + - + - + - + @@ -39895,26 +39953,26 @@ - + - + - + - + - + - + - + @@ -39929,20 +39987,20 @@ - + - + - + - + - + - + @@ -39951,12 +40009,12 @@ - + - + - + @@ -39966,380 +40024,380 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -40354,7 +40412,7 @@ - + @@ -40365,7 +40423,7 @@ - + @@ -40374,41 +40432,41 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -40437,7 +40495,7 @@ - + @@ -40446,7 +40504,7 @@ - + @@ -40454,7 +40512,7 @@ - + @@ -40471,7 +40529,7 @@ - + @@ -40480,7 +40538,7 @@ - + @@ -40489,10 +40547,10 @@ - + - + @@ -40500,10 +40558,10 @@ - + - + @@ -40511,9 +40569,9 @@ - + - + @@ -40522,7 +40580,7 @@ - + @@ -40534,15 +40592,15 @@ - + - + - + - + @@ -40550,10 +40608,10 @@ - + - + @@ -40561,7 +40619,7 @@ - + @@ -40575,10 +40633,10 @@ - + - + @@ -40595,10 +40653,10 @@ - + - + @@ -40607,7 +40665,7 @@ - + @@ -40616,19 +40674,19 @@ - + - + - + - + - - + + @@ -40648,10 +40706,10 @@ - + - + @@ -40659,13 +40717,13 @@ - + - + @@ -40673,16 +40731,16 @@ - + - + - + @@ -40693,7 +40751,7 @@ - + @@ -40701,7 +40759,7 @@ - + @@ -40718,10 +40776,10 @@ - + - + @@ -40732,16 +40790,16 @@ - + - + - + @@ -40752,10 +40810,10 @@ - + - + @@ -40781,7 +40839,7 @@ - + @@ -40799,12 +40857,12 @@ - + - + @@ -40816,7 +40874,7 @@ - + @@ -40828,12 +40886,12 @@ - + - + @@ -40845,7 +40903,7 @@ - + @@ -40854,7 +40912,7 @@ - + @@ -40862,7 +40920,7 @@ - + @@ -40883,7 +40941,7 @@ - + @@ -40921,10 +40979,10 @@ - + - + @@ -40932,9 +40990,9 @@ - + - + @@ -40946,18 +41004,18 @@ - + - + - + - + @@ -40965,13 +41023,13 @@ - + - + - + @@ -40982,19 +41040,19 @@ - + - + - + - + @@ -41002,26 +41060,26 @@ - + - + - + - + - + @@ -41033,12 +41091,12 @@ - + - + @@ -41050,7 +41108,7 @@ - + @@ -41061,13 +41119,13 @@ - + - + - + @@ -41078,19 +41136,19 @@ - + - + - + @@ -41101,10 +41159,10 @@ - + - + @@ -41121,7 +41179,7 @@ - + @@ -41129,20 +41187,20 @@ - + - + - + - + - + - + @@ -41150,26 +41208,26 @@ - + - + - + - + - + - + - + @@ -41177,31 +41235,31 @@ - + - + - + - + - + - + - + - + - + @@ -41209,7 +41267,7 @@ - + @@ -41221,7 +41279,7 @@ - + @@ -41229,7 +41287,7 @@ - + @@ -41241,7 +41299,7 @@ - + @@ -41264,10 +41322,10 @@ - + - + @@ -41278,21 +41336,21 @@ - + - + - + - + - + @@ -41300,7 +41358,7 @@ - + @@ -41320,7 +41378,7 @@ - + @@ -41337,427 +41395,403 @@ - + - + - + - + - + - + - + - + - - - - - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - - + - + - + - + - + + - + - + - + - + - + - + - + - + - + @@ -41781,49 +41815,49 @@ - + - + - + - + - + - + - + - + @@ -41847,25 +41881,25 @@ - + - + - + - + @@ -41877,301 +41911,325 @@ - + - + - + - + - + - + - + + + - - - + + + - - + + + - + + + - - + - - + + + - - + + - - + - - + + - - + + - - + + - - - - + + - - + + - - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + + + - - + + - - + + - - + + + + - - + + + - - + + - - - + + - - + + - - + + - - + + - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - + - - - - + + + - - - + + - - - - + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + + - + + + + + + + + + + + + + + + + + + + + + + + - + @@ -42179,92 +42237,93 @@ - - + + - - + + - - - + + + - - - - + + + + - - + + - - + + - - + + - - + + - + - - + + - + - - + + - + - + + - + - + - + - + - + - + @@ -42278,13 +42337,13 @@ - + - + @@ -42296,88 +42355,89 @@ - + - + - + - + - - - - - - - - - + + + + + + + + + + - - + + - - + + - - + + - + - - + + - + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - + @@ -42385,11 +42445,11 @@ - + - + @@ -42399,91 +42459,91 @@ - + - + - - + + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - + - + - + - + - + - + @@ -42497,13 +42557,13 @@ - + - + - + @@ -42524,21 +42584,21 @@ - + - + - + - + - + @@ -42547,21 +42607,21 @@ - + - + - + - + - + - + @@ -42572,10 +42632,10 @@ - + - + @@ -42617,10 +42677,10 @@ - + - + @@ -42629,7 +42689,7 @@ - + @@ -42647,13 +42707,13 @@ - + - + @@ -42665,46 +42725,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -42719,37 +42779,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -42763,16 +42823,16 @@ - + - + - + @@ -42792,12 +42852,12 @@ - + - + @@ -42830,7 +42890,7 @@ - + @@ -42844,19 +42904,19 @@ - + - + - + - + - + @@ -42885,7 +42945,7 @@ - + @@ -42923,7 +42983,7 @@ - + @@ -42941,7 +43001,7 @@ - + @@ -42976,15 +43036,15 @@ - + - + - + - + @@ -43028,7 +43088,7 @@ - + @@ -43064,16 +43124,16 @@ - + - + - + @@ -43081,26 +43141,26 @@ - + - + - + - + - + - + - + - + @@ -43118,7 +43178,7 @@ - + @@ -43138,21 +43198,21 @@ - + - + - + - + - + - + @@ -43191,7 +43251,7 @@ - + @@ -43206,15 +43266,15 @@ - + - + - + - + @@ -43223,12 +43283,12 @@ - + - + - + @@ -43243,7 +43303,7 @@ - + @@ -43266,24 +43326,24 @@ - + - + - + - + - + - + - + @@ -43297,7 +43357,7 @@ - + @@ -43313,7 +43373,7 @@ - + @@ -43321,21 +43381,21 @@ - + - - + + - + - + @@ -43347,24 +43407,24 @@ - + - + - + - + - + - + - + @@ -43372,7 +43432,7 @@ - + @@ -43411,13 +43471,13 @@ - + - + - + @@ -43435,7 +43495,7 @@ - + @@ -43447,7 +43507,7 @@ - + @@ -43498,53 +43558,53 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -43562,13 +43622,13 @@ - + - + - + @@ -43580,7 +43640,7 @@ - + @@ -43589,7 +43649,7 @@ - + @@ -43599,7 +43659,7 @@ - + @@ -43619,24 +43679,24 @@ - + - + - + - + - + @@ -43648,13 +43708,13 @@ - + - + @@ -43669,29 +43729,29 @@ - + - + - + - + - + - + - + - + - + @@ -43706,12 +43766,12 @@ - + - + @@ -43720,41 +43780,41 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -43762,7 +43822,7 @@ - + @@ -43780,7 +43840,7 @@ - + @@ -43788,17 +43848,17 @@ - + - + - + @@ -43809,76 +43869,76 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + @@ -43888,119 +43948,119 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + @@ -44014,55 +44074,54 @@ - - + + - - + + - - - - - - + + + + + - + - + - + - + - + - + - + - + - + @@ -44079,13 +44138,13 @@ - + - + @@ -44105,19 +44164,19 @@ - + - + - + - + @@ -44126,7 +44185,7 @@ - + @@ -44147,16 +44206,16 @@ - + - + - + @@ -44164,27 +44223,27 @@ - + - + - + - + - + - + - + - + @@ -44195,21 +44254,21 @@ - + - + - + - + - + - + @@ -44220,11 +44279,11 @@ - + - + - + @@ -44237,7 +44296,7 @@ - + @@ -44248,7 +44307,7 @@ - + @@ -44259,7 +44318,7 @@ - + @@ -44267,18 +44326,18 @@ - + - + - + @@ -44287,38 +44346,38 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -44327,7 +44386,7 @@ - + @@ -44347,22 +44406,22 @@ - + - + - + - + - + - + @@ -44377,16 +44436,16 @@ - + - + - + - + @@ -44395,151 +44454,150 @@ - + - + - - - - - - - - - - - - - - - + + + + + + + + + + + - - - + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -44550,13 +44608,13 @@ - + - + - + @@ -44566,12 +44624,12 @@ - + - + @@ -44579,68 +44637,68 @@ - - + + - + - + - + - - - - + + + + - + - + - - + + - - + + - - - - + + + + - - + + - + - + - + - + - + @@ -44685,7 +44743,7 @@ - + @@ -44712,7 +44770,7 @@ - + @@ -44766,19 +44824,19 @@ - + - + - + @@ -44787,10 +44845,10 @@ - + - + @@ -44811,22 +44869,22 @@ - + - + - + - + @@ -44841,7 +44899,7 @@ - + @@ -44862,83 +44920,83 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -44947,13 +45005,13 @@ - + - + - + @@ -44962,7 +45020,7 @@ - + @@ -44970,7 +45028,7 @@ - + @@ -44988,13 +45046,13 @@ - + - + - + @@ -45020,10 +45078,10 @@ - + - + @@ -45038,7 +45096,7 @@ - + @@ -45073,12 +45131,12 @@ - + - + - + @@ -45120,34 +45178,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -45156,16 +45214,16 @@ - + - + - + - + @@ -45174,7 +45232,7 @@ - + @@ -45189,7 +45247,7 @@ - + @@ -45201,7 +45259,7 @@ - + @@ -45230,7 +45288,7 @@ - + @@ -45283,7 +45341,7 @@ - + @@ -45495,7 +45553,7 @@ - + @@ -45510,7 +45568,7 @@ - + @@ -45530,7 +45588,7 @@ - + @@ -45541,7 +45599,7 @@ - + @@ -45558,7 +45616,7 @@ - + @@ -45584,7 +45642,7 @@ - + @@ -45598,7 +45656,7 @@ - + @@ -45606,7 +45664,7 @@ - + @@ -45615,12 +45673,12 @@ - + - + - + @@ -45629,27 +45687,27 @@ - + - + - + - + - + - - + + - + @@ -45660,364 +45718,369 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - - + + - - + + - - + + + + + + + - - + + - + - - + + - - + + - - - + + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - + + + + + + - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + - - + - + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + @@ -46025,80 +46088,80 @@ - + - + - + - - + + - + - + - + - + - - + + - - + + - + - - + + - + - + - + - + @@ -46134,28 +46197,28 @@ - + - - + + - + - + - + - + @@ -46166,169 +46229,169 @@ - + - - - - - - - + + + + + + + - + - + - + - + - + - + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - - + + - + - + - + - + - + - + @@ -46341,7 +46404,7 @@ - + @@ -46352,7 +46415,7 @@ - + @@ -46363,7 +46426,7 @@ - + @@ -46371,21 +46434,29 @@ - + - + - + - + + + + + + + + + @@ -46543,7 +46614,7 @@ - + @@ -46551,9 +46622,9 @@ - + - + @@ -46562,29 +46633,29 @@ - - + + - + - - + + - + - + - + - + @@ -46610,19 +46681,19 @@ - + - + - + - + @@ -46673,22 +46744,22 @@ - + - + - + - + - + @@ -46802,261 +46873,261 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - + + + + + + + - - - + + + - - - - - + + + + + + + + + - + - + - + - + - - + + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + @@ -47065,21 +47136,21 @@ - + - + - + - + - + @@ -47090,60 +47161,60 @@ - + - + - + - + - + - + - + - + - - - - - + + + - - + - + + + + - + - + @@ -47152,15 +47223,15 @@ - + - + - + @@ -47173,100 +47244,100 @@ - + - + - + - + - - - - - - - - - - - - - - - - - - - + + + - - - - + + + + + - - - + + + + + - - + + + + - - - + + + - + + + + + + + + + + + + - - - - - - - - - - - + + - - + - + + + - + + + + + + + + + - + @@ -47319,7 +47390,7 @@ - + @@ -47333,31 +47404,31 @@ - - + + - - + + - - + + - + - + - - + + @@ -47365,46 +47436,46 @@ - + - + - + - + - - + + - - + + - + - + - + - + @@ -47446,13 +47517,13 @@ - + - + @@ -47494,10 +47565,10 @@ - + - + @@ -47506,10 +47577,10 @@ - + - + @@ -47524,24 +47595,24 @@ - + - + - + - + - + - + @@ -47553,7 +47624,7 @@ - + @@ -47562,7 +47633,7 @@ - + @@ -47570,34 +47641,34 @@ - + - + - + - + - + - + - + - + @@ -47606,7 +47677,7 @@ - + @@ -47615,16 +47686,16 @@ - + - + - + @@ -47636,7 +47707,7 @@ - + @@ -47645,106 +47716,106 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -47753,7 +47824,7 @@ - + @@ -47761,7 +47832,7 @@ - + @@ -47770,20 +47841,20 @@ - + - + - + - + @@ -47792,8 +47863,8 @@ - - + + @@ -47821,200 +47892,200 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - + - - + + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + - - + + + + - - - + - - + + + - - + + - - + + - - - + + + - + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - + - - - + + + - + - + @@ -48028,60 +48099,60 @@ - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + - + - + - - + + - - - - - - - - - - + + + + + + + + + + @@ -48091,116 +48162,116 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -48227,7 +48298,7 @@ - + @@ -48236,16 +48307,16 @@ - + - + - + - + @@ -48257,12 +48328,12 @@ - + - + - + @@ -48272,10 +48343,10 @@ - + - + @@ -48284,16 +48355,16 @@ - + - + - + @@ -48308,19 +48379,19 @@ - + - + - + - + - + @@ -48341,7 +48412,7 @@ - + @@ -48377,13 +48448,13 @@ - + - + - + @@ -48398,7 +48469,7 @@ - + @@ -48431,7 +48502,7 @@ - + @@ -48488,7 +48559,7 @@ - + @@ -48497,34 +48568,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -48554,32 +48625,32 @@ - + - + - + - + - + - + - + @@ -48590,32 +48661,32 @@ - + - + - + - + - + - + @@ -48628,7 +48699,7 @@ - + @@ -48641,13 +48712,13 @@ - + - + @@ -48665,22 +48736,22 @@ - + - + - + - + - + @@ -48692,20 +48763,20 @@ - + - - + + - + - + - - + + @@ -48713,7 +48784,7 @@ - + @@ -48721,32 +48792,32 @@ - + - + - + - + - + - + - + - + - + - + @@ -48764,7 +48835,7 @@ - + @@ -48797,13 +48868,13 @@ - + - + - + @@ -48812,13 +48883,13 @@ - + - + - + @@ -48832,31 +48903,31 @@ - + - + - + - + - + - + - + @@ -48883,7 +48954,7 @@ - + @@ -48901,24 +48972,24 @@ - + - + - + - + - + - + - + @@ -48927,24 +48998,43 @@ - + - + - + - + + + + + + + + + + + + + + + + + + + + - + - + @@ -48962,13 +49052,13 @@ - + - + @@ -49006,9 +49096,9 @@ - + - + @@ -49020,24 +49110,24 @@ - + - + - + - + - + - + @@ -49057,30 +49147,30 @@ - + - + - + - + - + - + - + - + @@ -49119,7 +49209,7 @@ - + @@ -49143,16 +49233,16 @@ - + - + - + - + @@ -49170,21 +49260,21 @@ - + - + - + - + - + - + @@ -49217,12 +49307,12 @@ - + - + - + @@ -49237,15 +49327,15 @@ - + - + - + - + @@ -49266,18 +49356,18 @@ - + - + - + - + - + @@ -49289,19 +49379,19 @@ - + - + - + - + @@ -49334,24 +49424,24 @@ - + - + - + - + - + - + - + @@ -49363,13 +49453,13 @@ - + - + @@ -49377,15 +49467,15 @@ - + - + - + @@ -49399,7 +49489,7 @@ - + @@ -49420,23 +49510,23 @@ - + - + - + - + - + - + @@ -49445,23 +49535,23 @@ - + - + - + - + - + - + - + @@ -49479,10 +49569,10 @@ - + - + @@ -49491,16 +49581,16 @@ - + - + - + - + @@ -49514,10 +49604,10 @@ - + - + @@ -49526,9 +49616,9 @@ - + - + @@ -49552,7 +49642,7 @@ - + @@ -49564,15 +49654,15 @@ - + - + - + - + @@ -49581,13 +49671,13 @@ - + - + - + @@ -49611,7 +49701,7 @@ - + @@ -49626,20 +49716,20 @@ - + - + - + - + - + @@ -49648,16 +49738,16 @@ - + - + - + @@ -49666,24 +49756,24 @@ - + - + - + - + - + @@ -49694,7 +49784,7 @@ - + @@ -49718,7 +49808,7 @@ - + @@ -49727,7 +49817,7 @@ - + @@ -49739,47 +49829,47 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -49788,13 +49878,13 @@ - + - + @@ -49802,7 +49892,7 @@ - + @@ -49813,12 +49903,12 @@ - + - + - + @@ -49830,42 +49920,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -49900,10 +49990,10 @@ - + - + @@ -49915,19 +50005,19 @@ - + - + - + - + - + @@ -49956,7 +50046,7 @@ - + @@ -49983,7 +50073,7 @@ - + @@ -50018,7 +50108,7 @@ - + @@ -50030,13 +50120,13 @@ - + - + - + @@ -50045,7 +50135,7 @@ - + @@ -50054,16 +50144,16 @@ - + - + - + - + @@ -50078,26 +50168,26 @@ - + - + - + - + - + - + - + - + @@ -50118,7 +50208,7 @@ - + @@ -50126,7 +50216,7 @@ - + @@ -50140,7 +50230,7 @@ - + @@ -50148,18 +50238,18 @@ - + - + - + - + @@ -50173,29 +50263,29 @@ - + - + - + - + - + - + - + @@ -50207,10 +50297,10 @@ - + - + @@ -50228,30 +50318,30 @@ - + - + - + - + - + - + - + - + @@ -50259,7 +50349,7 @@ - + @@ -50276,7 +50366,7 @@ - + @@ -50284,55 +50374,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50341,19 +50431,19 @@ - - + + - + - + @@ -50371,7 +50461,7 @@ - + @@ -50380,7 +50470,7 @@ - + @@ -50394,16 +50484,16 @@ - + - + - + @@ -50421,24 +50511,24 @@ - + - + - + - + - + @@ -50447,10 +50537,10 @@ - + - + @@ -50462,16 +50552,16 @@ - + - + - + - + @@ -50480,28 +50570,28 @@ - + - + - + - + - + - + @@ -50516,12 +50606,12 @@ - + - + - + @@ -50533,99 +50623,99 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50648,7 +50738,7 @@ - + @@ -50656,7 +50746,7 @@ - + @@ -50674,10 +50764,10 @@ - + - + @@ -50703,7 +50793,7 @@ - + @@ -50711,16 +50801,16 @@ - + - + - + @@ -50746,15 +50836,15 @@ - + - + - + - + @@ -50762,7 +50852,7 @@ - + @@ -50776,42 +50866,28 @@ - + - + - + - - - - - - - - - - - - - - - + - + - + - + @@ -50834,37 +50910,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -50873,13 +50949,13 @@ - + - + @@ -50917,13 +50993,13 @@ - + - + - + @@ -50944,20 +51020,20 @@ - + - + - + - - + + @@ -50965,7 +51041,7 @@ - + @@ -50973,26 +51049,26 @@ - + - + - + - + - + - + - + - + @@ -51021,52 +51097,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -51074,7 +51150,7 @@ - + @@ -51082,55 +51158,55 @@ - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -51141,7 +51217,7 @@ - + @@ -51150,7 +51226,7 @@ - + @@ -51179,16 +51255,16 @@ - - + + - + - + @@ -51196,8 +51272,8 @@ - - + + @@ -51208,7 +51284,7 @@ - + @@ -51222,7 +51298,7 @@ - + @@ -51230,10 +51306,10 @@ - + - + @@ -51247,9 +51323,9 @@ - + - + @@ -51261,17 +51337,17 @@ - + - + - + - - + + @@ -51279,7 +51355,7 @@ - + @@ -51287,88 +51363,88 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -51391,8 +51467,8 @@ - - + + @@ -51400,13 +51476,13 @@ - + - + @@ -51414,21 +51490,21 @@ - - + + - + - + - + - + @@ -51442,8 +51518,8 @@ - - + + @@ -51457,27 +51533,27 @@ - + - + - + - + - + - + - + - + @@ -51498,10 +51574,10 @@ - + - + @@ -51513,7 +51589,7 @@ - + @@ -51524,13 +51600,13 @@ - + - + - + @@ -51538,12 +51614,12 @@ - + - + @@ -51569,250 +51645,249 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -51820,53 +51895,53 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + @@ -51876,7 +51951,7 @@ - + @@ -51890,592 +51965,592 @@ - + - - + + - - - - + + + + - + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - - - - + + + - - - + + - - - - + + + + + + - - - + + - - - + + + + + + + + + + - - - - - + + + + + + + + + + - - - - - - - - + + + - - - - - - - + + + - - - - - - - - - - + + + + + - - - + + + + + + + + - - - - - + - - - + + + - + + + - - + + + + - - + + + + + + + + + + + - - - - - - - - - - + + + - - - - - - + - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - - + + + + - - + + - - - + + + - - - + + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - - + + + - - + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - + - + - - + + - + - + - - - - + + + + - - + + - - + + - + - - + + - - + + - + - + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + + - + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - + + + - - - + + + - - + + - - + + + + - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -52485,46 +52560,46 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -52532,57 +52607,57 @@ - - - - - + + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -52590,23 +52665,23 @@ - + - + - + - + - + - + - + @@ -52616,7 +52691,7 @@ - + @@ -52624,10 +52699,10 @@ - + - + @@ -52640,9 +52715,9 @@ - - - + + + @@ -52660,123 +52735,123 @@ - + - - + + - - + + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -52803,24 +52878,24 @@ - + - + - + - + - + @@ -52847,10 +52922,10 @@ - + - + @@ -52868,9 +52943,9 @@ - + - + @@ -52879,13 +52954,13 @@ - + - + @@ -52914,15 +52989,15 @@ - + - + - + - + @@ -52931,7 +53006,7 @@ - + @@ -52946,7 +53021,7 @@ - + @@ -52960,7 +53035,7 @@ - + @@ -52972,7 +53047,7 @@ - + @@ -52986,10 +53061,10 @@ - + - + @@ -52997,13 +53072,13 @@ - + - + @@ -53029,14 +53104,14 @@ - + - + @@ -53074,10 +53149,10 @@ - + - + @@ -53085,7 +53160,7 @@ - + @@ -53093,7 +53168,7 @@ - + @@ -53104,10 +53179,10 @@ - + - + @@ -53116,43 +53191,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -53248,22 +53323,22 @@ - + - + - + - + - + @@ -53284,7 +53359,7 @@ - + @@ -53296,7 +53371,7 @@ - + @@ -53306,12 +53381,12 @@ - + - + - + @@ -53347,13 +53422,13 @@ - + - + - + @@ -53380,12 +53455,12 @@ - + - + @@ -53393,7 +53468,7 @@ - + @@ -53408,13 +53483,13 @@ - + - + - + @@ -53429,24 +53504,24 @@ - + - + - + - + - + - + - + @@ -53461,7 +53536,7 @@ - + @@ -53469,13 +53544,13 @@ - + - + @@ -53489,7 +53564,7 @@ - + @@ -53503,7 +53578,7 @@ - + @@ -53512,10 +53587,10 @@ - + - + @@ -53532,16 +53607,16 @@ - + - + - + - + @@ -53558,7 +53633,7 @@ - + @@ -53569,21 +53644,21 @@ - + - + - + - + - + @@ -53592,7 +53667,7 @@ - + @@ -53600,7 +53675,7 @@ - + @@ -53618,7 +53693,7 @@ - + @@ -53626,16 +53701,16 @@ - + - + - + @@ -53643,7 +53718,7 @@ - + @@ -53657,9 +53732,9 @@ - + - + @@ -53668,13 +53743,13 @@ - + - + @@ -53688,13 +53763,13 @@ - + - + - + @@ -53718,7 +53793,7 @@ - + @@ -53726,7 +53801,7 @@ - + @@ -53749,13 +53824,13 @@ - + - + - + @@ -53812,10 +53887,10 @@ - + - + @@ -53830,7 +53905,7 @@ - + @@ -53847,8 +53922,8 @@ - - + + @@ -53862,7 +53937,7 @@ - + @@ -53885,16 +53960,16 @@ - + - + - + - + @@ -53903,99 +53978,99 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - + + - - - + + + - + - + - + - + - + @@ -54007,21 +54082,21 @@ - + - + - + - + @@ -54029,20 +54104,20 @@ - + - + - + - + @@ -54052,32 +54127,32 @@ - + - + - + - + - + - + @@ -54088,8 +54163,8 @@ - - + + @@ -54100,28 +54175,28 @@ - + - + - + - + - + - + @@ -54130,30 +54205,30 @@ - + - - + + - + - + - + - + @@ -54171,11 +54246,11 @@ - + - + @@ -54183,74 +54258,74 @@ - + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - + + - + - - + + - - + + - - + + - + - + - + - + @@ -54289,7 +54364,7 @@ - + @@ -54301,13 +54376,13 @@ - + - + @@ -54319,22 +54394,22 @@ - + - + - + - + - + - + @@ -54343,13 +54418,13 @@ - + - + - + @@ -54370,7 +54445,7 @@ - + @@ -54378,46 +54453,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -54435,146 +54510,146 @@ - - - - - - - - - - - - + + + + + + + + + + + + - + - + - + - - + + - + - - + + - + - + - - + + - - + + - + - + - + - + - + - - + + - - + + - - + + - + - + - - + + - + - + - + - - + + - + - - + + - + - + @@ -54584,7 +54659,7 @@ - + @@ -54594,7 +54669,7 @@ - + @@ -54604,7 +54679,7 @@ - + @@ -54614,7 +54689,7 @@ - + @@ -54623,57 +54698,57 @@ - - + + - - + + - - + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - - + + + + @@ -54690,25 +54765,25 @@ - + - + - + - + - - + + - + @@ -54717,7 +54792,7 @@ - + @@ -54735,15 +54810,15 @@ - + - + - + - + @@ -54755,7 +54830,7 @@ - + @@ -54766,59 +54841,59 @@ - + - - + + - - - - - - - - - - - + + + + + + + + + + + - - - + + + - - - + + + - + - - - + + + - - + + - - - + + + - - - + + + @@ -54827,10 +54902,10 @@ - - + + - + @@ -54857,7 +54932,7 @@ - + @@ -54868,47 +54943,47 @@ - + - - - - + + + + - + - + - + - + - + - + - + @@ -54939,7 +55014,7 @@ - + @@ -54956,53 +55031,53 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -55010,7 +55085,7 @@ - + @@ -55023,46 +55098,46 @@ - + - + - + - + - - + + - - + + - - + + - + - + @@ -55076,23 +55151,23 @@ - - + + - - - - + + + + - + - + @@ -55100,7 +55175,7 @@ - + @@ -55108,7 +55183,7 @@ - + @@ -55116,14 +55191,14 @@ - + - + - + @@ -55137,21 +55212,21 @@ - + - + - + - + - + @@ -55160,161 +55235,161 @@ - + - + - + - - - - - - + + + + + + - + - + - + - - + + - + - - + + - + - + - - + + - - + + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - - + + @@ -55323,13 +55398,13 @@ - - + + - + - + @@ -55365,19 +55440,19 @@ - - - - - + + + + + - + - + @@ -55390,20 +55465,20 @@ - + - + - + - + - + @@ -55415,48 +55490,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -55477,7 +55552,7 @@ - + @@ -55554,15 +55629,15 @@ - + - + - + @@ -55618,7 +55693,7 @@ - + @@ -55636,16 +55711,16 @@ - + - + - + @@ -55654,35 +55729,35 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -55700,24 +55775,24 @@ - + - + - + - + - + - + @@ -55729,16 +55804,16 @@ - + - + - + - + @@ -55759,74 +55834,74 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -55855,10 +55930,10 @@ - + - + @@ -55866,7 +55941,7 @@ - + @@ -55874,13 +55949,13 @@ - + - + @@ -55889,14 +55964,14 @@ - + - + @@ -55913,13 +55988,13 @@ - + - + @@ -55927,7 +56002,7 @@ - + @@ -55936,55 +56011,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -55992,110 +56067,110 @@ - - - - - - - - - - - + + + - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + @@ -56113,281 +56188,281 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - + + + - - - - - + - - - - - - - - - - - - - - - - - - - + - - - + - + - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - + - - + + + - - + - + + - - + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - - + + + - + - + - - + + - + @@ -56398,47 +56473,47 @@ - + - + - + - + - + - - + + - + - + - + - + - + @@ -56446,60 +56521,60 @@ - + - + - - + + - - - + + + - + - + - - + + - - + + - + - + - + - + - + @@ -56510,166 +56585,166 @@ - + - - + + - + - + - + - + - + - + - + - - + + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -56684,19 +56759,19 @@ - + - + - + - + @@ -56723,79 +56798,79 @@ - + - - - - - - - - - + + + + - - + + + + + + + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + @@ -56804,67 +56879,67 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + - + - + @@ -56873,17 +56948,17 @@ - - + + - + - + - + @@ -56892,87 +56967,87 @@ - + - - + + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - - - - + + + + - - + + - - + + - - + + - + @@ -56981,41 +57056,41 @@ - + - + - + - + - - + + - - + + - + - + - - + + - + @@ -57025,45 +57100,45 @@ - - - + + + - - - + + + - + - + - + - + - + - + - + - + @@ -57072,7 +57147,7 @@ - + @@ -57083,12 +57158,12 @@ - + - + @@ -57109,7 +57184,7 @@ - + @@ -57118,36 +57193,36 @@ - + - + - + - + - + - + - + - + @@ -57156,16 +57231,16 @@ - + - + - + @@ -57176,27 +57251,27 @@ - + - + - + - + - + - + - + - + @@ -57204,16 +57279,16 @@ - + - + - + @@ -57221,15 +57296,15 @@ - + - + - + - + @@ -57237,55 +57312,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -57313,71 +57388,71 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -57386,69 +57461,69 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -57466,100 +57541,100 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - + - - + + @@ -57575,15 +57650,15 @@ - + - - - + + + - + @@ -57591,10 +57666,10 @@ - + - - + + @@ -57615,160 +57690,160 @@ - + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + - - + - + + + - - - + + + + - + - - + - + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - - + + - - - + + + - - - + + + - - - + + + - - + + - - + + @@ -57791,49 +57866,49 @@ - + - - - - - - - - + + + + + + + + - + - + - + - + - + - - + + @@ -57846,13 +57921,13 @@ - - + + - + @@ -57860,56 +57935,56 @@ - - - + + + - - - + + + - - - - - - - - - - - - - - - + + - - + + + + + + + + + + + + + + + - - + + - - + + @@ -57917,39 +57992,39 @@ - - + + - + - + - - + + - + - + - + - + @@ -57961,33 +58036,33 @@ - + - + - + - + - + - + @@ -58067,7 +58142,7 @@ - + @@ -58075,28 +58150,28 @@ - - - - - - - - - + + + + + + + + + - - + + - + - + @@ -58111,159 +58186,159 @@ - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - + + + + + + - + - + - + - + - + - - + + - + - + - + - + - - - + + + - - - + + + - + - - + + - + - + - + - + - + @@ -58272,7 +58347,7 @@ - + @@ -58281,45 +58356,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -58333,32 +58408,32 @@ - + - + - + - + - + - + - + @@ -58366,21 +58441,21 @@ - + - + - + - + @@ -58388,130 +58463,130 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - + - + - + - - + + - - + + - + - + - + - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + + + + + + + + + - - - + + + + + - - - + + + + + + + + + + + + + + + + + + + + - + - - + + - - + + - + - + @@ -58535,7 +58610,7 @@ - + @@ -58544,13 +58619,13 @@ - + - + @@ -58558,150 +58633,150 @@ - - - + + + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - - - + + + - - - - + + + + - + - + - + - + - + - - + + @@ -58709,29 +58784,29 @@ - + - + - + - + - - - + + + - + @@ -58752,10 +58827,10 @@ - + - + @@ -58770,13 +58845,13 @@ - + - + - + @@ -58794,7 +58869,7 @@ - + @@ -58806,7 +58881,7 @@ - + @@ -58820,7 +58895,7 @@ - + @@ -58835,13 +58910,13 @@ - + - + @@ -58865,7 +58940,7 @@ - + @@ -58973,18 +59048,18 @@ - + - + - + - + @@ -58993,27 +59068,27 @@ - + - + - + - + - + @@ -59054,16 +59129,16 @@ - + - + - + - + @@ -59108,7 +59183,7 @@ - + @@ -59128,8 +59203,8 @@ - - + + @@ -59137,113 +59212,113 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -59257,12 +59332,12 @@ - + - + - + @@ -59276,7 +59351,7 @@ - + @@ -59296,233 +59371,233 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - + + + + - - - - + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - + - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -59530,33 +59605,33 @@ - + - + - + - + - + - + - + - + - + - + @@ -59574,7 +59649,7 @@ - + @@ -59597,59 +59672,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -59657,26 +59732,26 @@ - + - + - + - + - + - + - + @@ -59687,38 +59762,38 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -59738,34 +59813,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -59777,229 +59852,229 @@ - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - + - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - + - + - - + + + + - - + + + - + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + - + @@ -60026,21 +60101,21 @@ - + - + - + - + @@ -60050,45 +60125,45 @@ - + - + - + - + - + - + - + - + - + - - + + - + @@ -60100,13 +60175,13 @@ - + - + @@ -60118,10 +60193,10 @@ - + - + @@ -60139,10 +60214,10 @@ - + - + @@ -60159,41 +60234,41 @@ - + - - - - - - - - + + + + + + + + - - - + + + - + - + - + @@ -60202,9 +60277,9 @@ - + - + @@ -60213,7 +60288,7 @@ - + @@ -60246,10 +60321,10 @@ - + - + @@ -60279,7 +60354,7 @@ - + @@ -60291,36 +60366,36 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -60349,7 +60424,7 @@ - + @@ -60357,10 +60432,10 @@ - + - + @@ -60368,37 +60443,37 @@ - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - - + + @@ -60406,74 +60481,74 @@ - + - + - + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - + + - + - + - + @@ -60484,19 +60559,19 @@ - - + + - + - + - + - + @@ -60517,92 +60592,92 @@ - + - + - + - + - + - + - + - + - - - - - - + + + + + + - + - + - + - - - + + + - + - - - - + + + + - - - + + + - - - - + + + + - + - + - + @@ -60692,19 +60767,19 @@ - + - + - + - + @@ -60878,19 +60953,19 @@ - + - + - + - + @@ -60902,7 +60977,7 @@ - + @@ -60911,7 +60986,7 @@ - + @@ -60943,13 +61018,13 @@ - + - + - + @@ -61051,7 +61126,7 @@ - + @@ -61084,25 +61159,25 @@ - + - + - + - + - + @@ -61110,7 +61185,7 @@ - + @@ -61118,85 +61193,85 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -61256,10 +61331,10 @@ - + - + @@ -61271,18 +61346,18 @@ - + - + - + - + @@ -61327,10 +61402,10 @@ - + - + @@ -61339,16 +61414,16 @@ - + - + - + @@ -61366,9 +61441,9 @@ - + - + @@ -61392,7 +61467,7 @@ - + @@ -61400,7 +61475,7 @@ - + @@ -61417,24 +61492,24 @@ - + - + - + - + - + - + - + @@ -61443,7 +61518,7 @@ - + @@ -61485,7 +61560,7 @@ - + @@ -61494,7 +61569,7 @@ - + @@ -61502,7 +61577,7 @@ - + @@ -61512,7 +61587,7 @@ - + @@ -61520,16 +61595,16 @@ - + - - + + - + @@ -61541,141 +61616,141 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - + @@ -61701,7 +61776,15 @@ - + + + + + + + + + @@ -61712,7 +61795,7 @@ - + @@ -61723,29 +61806,29 @@ - + - + - + - + - + - + - + - - + + @@ -61771,27 +61854,27 @@ - + - + - - - - - - - - + + + + + + + + - + @@ -61801,169 +61884,89 @@ - - + + - - + + - + - + - - + + - - - + + + - - - + + + - - - - + + + + - + - - + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + @@ -61972,30 +61975,30 @@ - + - - + + - + - + - + - + @@ -62033,71 +62036,71 @@ - + - + - + - + - + - + - + - - - + + + - - + + - + - + - - + + - - + + - - + + - + - + @@ -62105,13 +62108,13 @@ - + - + @@ -62126,7 +62129,7 @@ - + @@ -62162,16 +62165,16 @@ - + - + - + @@ -62179,25 +62182,25 @@ - + - + - + - + - + - + @@ -62211,18 +62214,18 @@ - + - + - + - + @@ -62234,25 +62237,25 @@ - + - + - + - + - + - + - + @@ -62267,7 +62270,7 @@ - + @@ -62291,13 +62294,13 @@ - + - + @@ -62309,7 +62312,7 @@ - + @@ -62330,7 +62333,7 @@ - + @@ -62372,25 +62375,25 @@ - + - + - + - + @@ -62405,13 +62408,13 @@ - + - + - + @@ -62420,13 +62423,13 @@ - + - + @@ -62435,44 +62438,44 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -62481,19 +62484,19 @@ - + - + - + - + - + @@ -62507,62 +62510,62 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -62572,18 +62575,18 @@ - + - + - + - + - + @@ -62598,7 +62601,7 @@ - + @@ -62640,37 +62643,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -62690,43 +62693,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -62740,77 +62743,85 @@ - + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -62833,7 +62844,7 @@ - + @@ -62849,23 +62860,23 @@ - + - + - + - + - + - + @@ -62886,62 +62897,62 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -62949,7 +62960,7 @@ - + @@ -62972,7 +62983,7 @@ - + @@ -62980,59 +62991,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -63044,42 +63055,42 @@ - + - + - + - + - + - + - + - + - + - + @@ -63099,23 +63110,23 @@ - + - + - + - + - + - + - + @@ -63133,15 +63144,15 @@ - + - + - + @@ -63149,7 +63160,7 @@ - + @@ -63173,14 +63184,14 @@ - + - + @@ -63197,7 +63208,7 @@ - + @@ -63218,15 +63229,15 @@ - + - + - + @@ -63234,7 +63245,7 @@ - + @@ -63257,15 +63268,15 @@ - + - + - + @@ -63279,15 +63290,15 @@ - + - + - + @@ -63301,7 +63312,7 @@ - + @@ -63313,7 +63324,7 @@ - + @@ -63327,7 +63338,7 @@ - + @@ -63354,7 +63365,7 @@ - + @@ -63368,53 +63379,53 @@ - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + + @@ -63428,14 +63439,14 @@ - + - + @@ -63443,52 +63454,52 @@ - + - + - + - + - + - - - + + + - - - + + + - - - + + + @@ -63496,141 +63507,141 @@ - + - + - + - - - - - - - - - - - - - + + - - - + + - + + + + + + + + + + + + + - - - - - - - - - - - - + - - + + - - - - + + + - + - - - + + + + - - + + - - - + + + - - + + - - + + + + + + + + + - + + + + + - - + + - - - - + + + + - - + + - - + + - - - + + + - + @@ -63641,7 +63652,7 @@ - + @@ -63653,61 +63664,61 @@ - + - + - + - - - - - + + + + + - - + + - - - + + + - - - + + + - + - - - + + + - + - - - - + + + + @@ -63717,12 +63728,12 @@ - + - + - + @@ -63737,13 +63748,13 @@ - + - + @@ -63755,7 +63766,7 @@ - + @@ -63770,25 +63781,25 @@ - + - + - + - + - + - + - + @@ -63803,19 +63814,19 @@ - + - + - + - + @@ -63830,34 +63841,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -63868,7 +63879,7 @@ - + @@ -63885,25 +63896,25 @@ - + - + - + - - + + - + @@ -63914,37 +63925,37 @@ - - - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + + + - + - + @@ -63954,26 +63965,26 @@ - - + + - + - - - + + + - - - + + + @@ -63981,49 +63992,49 @@ - + - - - - - - - - - + + + + + + + + + - - - - - - - - + + + + + + + + - + - + - - + + - + @@ -64033,7 +64044,7 @@ - + @@ -64044,47 +64055,47 @@ - + - + - + - + - - - - + + + + - + - + - + - - + + - + - + - + @@ -64092,7 +64103,7 @@ - + @@ -64103,21 +64114,21 @@ - + - + - + - + - + - + @@ -64125,7 +64136,7 @@ - + @@ -64136,7 +64147,7 @@ - + @@ -64144,27 +64155,27 @@ - + - + - + - + - + @@ -64172,12 +64183,12 @@ - + - + - + @@ -64186,9 +64197,9 @@ - + - + @@ -64197,9 +64208,9 @@ - + - + @@ -64214,29 +64225,29 @@ - + - + - - - - - + + + + - - - - - + + + + + + @@ -64247,7 +64258,7 @@ - + @@ -64263,13 +64274,13 @@ - + - + @@ -64298,160 +64309,160 @@ - - + + - - - - - - - + + - + + - - - - + + + - + + + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - - + - - - - + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + @@ -64459,8 +64470,8 @@ - - + + @@ -64468,12 +64479,12 @@ - - + + - - + + @@ -64502,19 +64513,19 @@ - - + + - + - + - + @@ -64562,30 +64573,30 @@ - + - + - + - + - + - + - + @@ -64615,57 +64626,57 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -64676,7 +64687,7 @@ - + @@ -64703,21 +64714,21 @@ - + - + - + - + - + @@ -64726,15 +64737,15 @@ - + - + - + @@ -64743,7 +64754,7 @@ - + @@ -64761,36 +64772,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -64801,12 +64812,12 @@ - + - + @@ -64824,42 +64835,42 @@ - - - - - - - + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + - + @@ -64869,126 +64880,126 @@ - + - + - + - + - - - - - - - - - - - - - + - + + + - - + + + + + + + + + + + + - - + + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - + + + + + + + + + - + @@ -65002,17 +65013,17 @@ - + - + - + @@ -65021,28 +65032,28 @@ - - + + - - + + - - + + - - + + @@ -65051,68 +65062,68 @@ - + - + - + - + - - - - + + + + - + - + - - + + - + - - + + - + - + - + - + - + - + @@ -65120,27 +65131,27 @@ - + - + - + - + - + - + @@ -65182,13 +65193,13 @@ - + - + - + @@ -65209,76 +65220,76 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -65287,7 +65298,7 @@ - + @@ -65302,39 +65313,39 @@ - + - + - + - + - + - + - + - + - + - + @@ -65342,9 +65353,9 @@ - + - + @@ -65353,7 +65364,7 @@ - + @@ -65380,9 +65391,9 @@ - + - + @@ -65391,24 +65402,24 @@ - + - + - + - + - + - + - + @@ -65419,7 +65430,7 @@ - + @@ -65430,26 +65441,26 @@ - + - + - + - + - + - + - + - + @@ -65458,224 +65469,224 @@ - + - - - - - + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - - + + - + - + - - + + - - - - - - - - - - - - - - - - - + + + + - - + + + - - + + + + - + + - - + + - - + - - + + - + - - - - + + - + - + - + + - - + - + - - + + + - - + + + - - + + - - + + - - - + - - + + + + + + + + + + + + + + - + - + - + - + - - + + - + - + - + - + @@ -65689,44 +65700,44 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -65750,7 +65761,7 @@ - + @@ -65759,7 +65770,7 @@ - + @@ -65771,97 +65782,97 @@ - - - - - - - - + + + + + + - + + + - + - + - - + + - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + - + - + - - + + - - + + - - + + - - - - + + + + @@ -65875,46 +65886,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -65923,7 +65934,7 @@ - + @@ -65931,22 +65942,22 @@ - + - + - + - + - + @@ -65970,16 +65981,16 @@ - + - + - + - + @@ -65994,7 +66005,7 @@ - + @@ -66024,7 +66035,7 @@ - + @@ -66063,10 +66074,10 @@ - + - + @@ -66074,7 +66085,7 @@ - + @@ -66104,31 +66115,31 @@ - + - + - + - + - + - + - + @@ -66154,50 +66165,50 @@ - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + @@ -66251,9 +66262,9 @@ - + - + @@ -66265,7 +66276,7 @@ - + @@ -66277,12 +66288,12 @@ - + - + - + @@ -66303,144 +66314,144 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -66454,7 +66465,7 @@ - + @@ -66462,13 +66473,13 @@ - + - + @@ -66485,266 +66496,266 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + - + + + + + + - - + + - + - - + + - - + + - - + + - - - - - - - - - - - + + - + - - + + - + + + + + + + + + + - - + + - - + + - - - - - - - - - - - + + + + + + + + + + + - + - + @@ -66752,18 +66763,18 @@ - + - + - + - + @@ -66772,265 +66783,265 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - + + + + - - - - - - - - - + + + + + + + + + - + + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - + - - - - - - - - - - - + + + + + + + + + + + + + + + + - + + + + + + + - - - - - - - - - - - + - + + + + + + + + + + + - + - + - - + + - + - - + + - + - + - + - + @@ -67084,7 +67095,7 @@ - + @@ -67093,19 +67104,19 @@ - + - + - + - + - + @@ -67114,7 +67125,7 @@ - + @@ -67125,55 +67136,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67206,13 +67217,13 @@ - + - + - + @@ -67221,10 +67232,10 @@ - + - + @@ -67239,7 +67250,7 @@ - + @@ -67257,7 +67268,7 @@ - + @@ -67266,28 +67277,28 @@ - + - + - + - + - + @@ -67298,10 +67309,10 @@ - + - + @@ -67318,18 +67329,18 @@ - + - + - + - + - + @@ -67338,16 +67349,16 @@ - + - + - + @@ -67358,7 +67369,7 @@ - + @@ -67393,27 +67404,27 @@ - + - + - + - + - + - + @@ -67428,88 +67439,88 @@ - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67521,10 +67532,10 @@ - + - + @@ -67545,10 +67556,10 @@ - + - + @@ -67569,27 +67580,27 @@ - + - + - + - + - + @@ -67607,7 +67618,7 @@ - + @@ -67621,7 +67632,7 @@ - + @@ -67633,22 +67644,22 @@ - + - + - + - + - + @@ -67669,73 +67680,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67743,11 +67754,11 @@ - + - - + + @@ -67758,13 +67769,13 @@ - - + + - + @@ -67774,18 +67785,18 @@ - + - + - + - + @@ -67794,26 +67805,26 @@ - + - + - + - + - + - - + + @@ -67824,24 +67835,24 @@ - - - + + + - + - + - + @@ -67855,7 +67866,7 @@ - + @@ -67864,15 +67875,15 @@ - + - + - + @@ -67880,7 +67891,7 @@ - + @@ -67888,7 +67899,7 @@ - + @@ -67909,10 +67920,10 @@ - + - + @@ -67926,9 +67937,9 @@ - + - + @@ -67937,10 +67948,10 @@ - + - + @@ -67961,7 +67972,7 @@ - + @@ -67973,39 +67984,39 @@ - + - + - + - + - + - + - + - + @@ -68013,23 +68024,23 @@ - + - + - + - + - + - + - + @@ -68040,88 +68051,88 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - + - + + + - + @@ -68133,16 +68144,16 @@ - + - + - + @@ -68152,7 +68163,7 @@ - + @@ -68162,84 +68173,68 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - + + + - + - + + + + + - + - + + - - - - + - - + - + + - + + - - + + @@ -68247,228 +68242,244 @@ + - - - + + + + + + - + - - - + + + + - - + + + + + + + + + + + + + - - + + - - + + - + - - - - - - - - - - + - + + - - + - - + - - + + - + + + + + + + + + + + - - + + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - + - - - - - - - - - - + - - + + - - + - - - + + - - + + - - - + + + - - + + - - - + + + - - - + + + + + + + + + + + + + + - + - + - + - - - + + + - - + + - + - + @@ -68488,33 +68499,33 @@ - + - + - + - + - + - + - + - + @@ -68522,7 +68533,7 @@ - + @@ -68530,22 +68541,22 @@ - + - + - + - + @@ -68553,11 +68564,11 @@ - + - + @@ -68566,28 +68577,28 @@ - + - + - + - - + + - + @@ -68599,8 +68610,8 @@ - - + + @@ -68608,7 +68619,7 @@ - + @@ -68616,18 +68627,18 @@ - - + + - - + + - - + + @@ -68635,21 +68646,21 @@ - + - + - + - + @@ -68657,7 +68668,7 @@ - + @@ -68669,7 +68680,7 @@ - + @@ -68677,9 +68688,9 @@ - - - + + + @@ -68691,7 +68702,7 @@ - + @@ -68702,22 +68713,22 @@ - + - - + + - + - + @@ -68725,7 +68736,7 @@ - + @@ -68734,11 +68745,11 @@ - + - + @@ -68749,27 +68760,27 @@ - + - + - + - + - + @@ -68782,67 +68793,67 @@ - + - + - + - - + + - + - + - + - - + + - + - + - + - + - - + + - + @@ -68850,108 +68861,108 @@ - + - - + + - + - + - + - - + + - - + + - + - - + + - - + + - - + + - + - + - + - + - + - - + + - - - + + + - - + + - - + + - - + + - + - + @@ -68960,10 +68971,10 @@ - + - + @@ -68975,27 +68986,27 @@ - + - + - + - + - + - + - + @@ -69010,7 +69021,7 @@ - + @@ -69022,7 +69033,7 @@ - + @@ -69042,18 +69053,18 @@ - + - + - + - + @@ -69067,60 +69078,60 @@ - + - + - + - - - - - - - - - - + + + + + + + + + + - - + + - + - - + + - - + + - - + + - + - - + + - + @@ -69137,7 +69148,7 @@ - + @@ -69145,33 +69156,33 @@ - + - + - + - + - - + + - - + + - + - - + + @@ -69188,111 +69199,111 @@ - + - + - + - - - + + + - + - - + + - - + + - - + + - - - + + + - - + + - + - + - - + + - - + + - + - + - - + + - - - + + + - - + + - + - + - + @@ -69304,89 +69315,89 @@ - - + + - - + + - - + + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - - + + - + - + - + - + @@ -69397,7 +69408,7 @@ - + @@ -69406,7 +69417,7 @@ - + @@ -69415,54 +69426,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -69479,7 +69490,7 @@ - + @@ -69490,10 +69501,10 @@ - + - + @@ -69510,7 +69521,7 @@ - + @@ -69524,7 +69535,7 @@ - + @@ -69538,10 +69549,10 @@ - + - + @@ -69564,7 +69575,7 @@ - + @@ -69581,16 +69592,16 @@ - + - + - + @@ -69604,10 +69615,10 @@ - + - + @@ -69618,13 +69629,13 @@ - + - + @@ -69641,7 +69652,7 @@ - + @@ -69652,10 +69663,10 @@ - + - + @@ -69666,13 +69677,13 @@ - + - + @@ -69683,10 +69694,10 @@ - + - + @@ -69695,13 +69706,13 @@ - + - + @@ -69712,44 +69723,44 @@ - + - + - - - - - - - - - - - - + + + + + + + + - - - + + + + + + + - + - + - - + + @@ -69759,12 +69770,12 @@ - + - - + + @@ -69772,25 +69783,25 @@ - + - + - - - - + + + + - + - + @@ -69802,13 +69813,13 @@ - + - + @@ -69817,19 +69828,19 @@ - + - + - + - + @@ -69883,10 +69894,10 @@ - + - + @@ -69895,19 +69906,19 @@ - + - + - + - + @@ -69925,7 +69936,7 @@ - + @@ -69936,130 +69947,130 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70074,16 +70085,16 @@ - + - + - + @@ -70092,28 +70103,28 @@ - + - + - + - + - + - + - + @@ -70125,19 +70136,19 @@ - + - + - + - + @@ -70149,40 +70160,40 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -70190,50 +70201,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70241,13 +70252,13 @@ - + - + @@ -70273,13 +70284,13 @@ - + - + @@ -70290,152 +70301,152 @@ - + - + - - - - - + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + - - - - - + + + + + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - - - + + + - - + + - - - - - - - - - - - + - + + + + + + + + + + + - - + + - - + + @@ -70443,247 +70454,247 @@ - - - - - - - - - - - - - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - + + + - - - - - + + + - - - - - - + + + - - - + + + + - + + + + + + - - + + + + - - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - + + - - - + + - - + + - - + + + + - + + + + + + + + + + - - - - - - - - - - - + - - + + - - + + - + + + + + + + + + + + - + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - - - - + + + + - + - + - - + + - + - + - + - + - + - + @@ -70698,25 +70709,25 @@ - + - + - + - + - + @@ -70725,16 +70736,16 @@ - + - + - + @@ -70746,7 +70757,7 @@ - + @@ -70758,9 +70769,9 @@ - + - + @@ -70778,13 +70789,13 @@ - + - + - + @@ -70796,7 +70807,7 @@ - + @@ -70808,12 +70819,12 @@ - + - + @@ -70822,18 +70833,18 @@ - + - + - + - + - + @@ -70848,76 +70859,76 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70938,18 +70949,18 @@ - + - + - + - + - + @@ -70969,8 +70980,8 @@ - - + + @@ -70978,7 +70989,7 @@ - + @@ -70992,12 +71003,12 @@ - + - + - + @@ -71006,13 +71017,13 @@ - + - + - + @@ -71021,19 +71032,19 @@ - + - + - + - + @@ -71042,16 +71053,16 @@ - + - + - + @@ -71081,37 +71092,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -71126,13 +71137,13 @@ - + - + - + @@ -71150,52 +71161,63 @@ - + - + - + - + - - - - - + + + + + - + - + - + - + - + - - + + - + - + - + + + + + + + + + + + + @@ -71236,12 +71258,12 @@ - + - + - + @@ -71250,10 +71272,10 @@ - + - + @@ -71264,14 +71286,14 @@ - + - - + + @@ -71285,70 +71307,58 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + @@ -71356,104 +71366,104 @@ - + - - - - - - - - - - - + + - + + + + + + + + + + - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - + + + + + + + + + + - - + + - - + + - + - + - + @@ -71467,13 +71477,13 @@ - + - + @@ -71485,13 +71495,13 @@ - + - + @@ -71515,16 +71525,16 @@ - + - + - + @@ -71536,13 +71546,13 @@ - + - + - + @@ -71557,7 +71567,7 @@ - + @@ -71572,63 +71582,63 @@ - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - - + + - + @@ -71645,97 +71655,97 @@ - - + + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - - + + - - + + - - - + + + - - - + + + - - + + - - - - + + + + - + - + @@ -71746,41 +71756,41 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -71789,12 +71799,12 @@ - + - + @@ -71803,64 +71813,64 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -71871,15 +71881,15 @@ - + - + - + - + @@ -71888,86 +71898,86 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -71976,21 +71986,21 @@ - + - + - + - + @@ -71998,7 +72008,7 @@ - + @@ -72006,21 +72016,21 @@ - + - + - + - + - + @@ -72035,7 +72045,7 @@ - + @@ -72059,10 +72069,10 @@ - + - + @@ -72070,36 +72080,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -72108,7 +72118,7 @@ - + @@ -72117,7 +72127,7 @@ - + @@ -72141,36 +72151,36 @@ - + - + - + - + - + - + - + - + @@ -72185,7 +72195,7 @@ - + @@ -72239,50 +72249,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72291,33 +72301,33 @@ - + - + - + - + - + - + - + - + - + @@ -72332,7 +72342,7 @@ - + @@ -72340,13 +72350,13 @@ - + - + @@ -72373,48 +72383,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72449,7 +72459,7 @@ - + @@ -72467,7 +72477,7 @@ - + @@ -72487,50 +72497,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -72547,458 +72557,458 @@ - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - - + + - - - + + + - - - - - + + + + + - + + + - - - + - - + + - + - - + + - - - - - - - - - - + - + - - + + - - + - + + - - + + - - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + - - + + - - + + - - + + - - - - - - - - - + + + + + - + + - - - + - - - - - - - + + + - - + + - + - + + - - + - + - - + + - + - + + - + - - + - - + + + + + + + + + + + - - - + + + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - + - + - + @@ -73015,7 +73025,7 @@ - + @@ -73025,17 +73035,17 @@ - + - + - + @@ -73045,103 +73055,103 @@ - - + + - + - + - - + + - + - + - + - + - - + + - - - + + + - + - + - + - + - + - + - + - - - + + + - + - + - + - + - + @@ -73150,89 +73160,89 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - + @@ -73244,48 +73254,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -73303,47 +73313,47 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -73354,7 +73364,7 @@ - + @@ -73365,94 +73375,94 @@ - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - + - + - + - - - + + + - - - + + + - + - - + + - - + + - - + + - - + + @@ -73468,78 +73478,78 @@ - - + + - + - - - + + + - + - - - - - - - - - - - - + + - - + + - + + - - - + - - + - - - + + + + - + - - + + + - - + + + + + + + + + + + + @@ -73547,32 +73557,32 @@ - + - - - + + + - + - - + + - + - - + + - + @@ -73580,25 +73590,25 @@ - - + + - + - + - + - + - + @@ -73607,7 +73617,7 @@ - + @@ -73616,16 +73626,16 @@ - + - + - + @@ -73639,43 +73649,43 @@ - + - + - + - + - + - + - + - + - + @@ -73695,46 +73705,46 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -73752,13 +73762,13 @@ - + - + @@ -73784,16 +73794,16 @@ - + - + - + - + @@ -73847,7 +73857,7 @@ - + @@ -73858,7 +73868,7 @@ - + @@ -73902,27 +73912,27 @@ - + - + - + - + - + - + - + - + @@ -73988,7 +73998,7 @@ - + @@ -74014,7 +74024,7 @@ - + @@ -74058,7 +74068,7 @@ - + @@ -74087,13 +74097,13 @@ - + - + - + @@ -74101,90 +74111,90 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -74204,7 +74214,7 @@ - + @@ -74224,7 +74234,7 @@ - + @@ -74250,10 +74260,10 @@ - + - + @@ -74267,13 +74277,13 @@ - + - + - + @@ -74281,7 +74291,7 @@ - + @@ -74295,15 +74305,15 @@ - + - + - + @@ -74311,159 +74321,159 @@ - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + + + - + - + - - - + + + - - - - - - - - - - - + + + - - + + + + + + + + + + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - - - - - - - - - - + - - + + + + + + + + + + + + - + @@ -74473,13 +74483,13 @@ - + - + - + @@ -74488,40 +74498,40 @@ - + - + - + - + - + - + - + - + - + @@ -74539,7 +74549,7 @@ - + @@ -74547,7 +74557,7 @@ - + @@ -74558,14 +74568,14 @@ - + - + @@ -74581,7 +74591,7 @@ - + @@ -74594,7 +74604,7 @@ - + @@ -74605,35 +74615,35 @@ - + - + - + - + - + - + @@ -74645,16 +74655,16 @@ - + - + - + - + @@ -74666,7 +74676,7 @@ - + @@ -74685,14 +74695,14 @@ - + - + @@ -74703,7 +74713,7 @@ - + @@ -74716,29 +74726,29 @@ - + - + - + - + - + - + - + - + - + @@ -74747,9 +74757,9 @@ - + - + @@ -74764,10 +74774,10 @@ - + - + @@ -74784,17 +74794,17 @@ - + - + - + - + - + @@ -74806,9 +74816,9 @@ - + - + @@ -74823,13 +74833,13 @@ - + - + @@ -74841,9 +74851,9 @@ - + - + @@ -74852,16 +74862,16 @@ - + - + - + - + @@ -74876,18 +74886,18 @@ - + - + - + @@ -74895,7 +74905,7 @@ - + @@ -74903,12 +74913,12 @@ - - - + + + - + @@ -74924,29 +74934,29 @@ - + - + - + - + - + @@ -74961,76 +74971,76 @@ - + - + - + - + - + - + - + - - - - - + + + + + - + - + - + - + - + - + - + - + - - + + - + - - + + @@ -75038,11 +75048,11 @@ - + - + @@ -75050,7 +75060,7 @@ - + @@ -75058,7 +75068,7 @@ - + @@ -75067,121 +75077,134 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + + + + + + + + + + + + + + - + - + - + - + - + - + - + - - + + - - - + + + - + - + - + - + @@ -75214,7 +75237,7 @@ - + @@ -75223,7 +75246,7 @@ - + @@ -75231,100 +75254,100 @@ - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - + + + + + + + - - - + + + + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + @@ -75362,16 +75385,16 @@ - + - - + + - + @@ -75397,9 +75420,9 @@ - + - + @@ -75417,7 +75440,7 @@ - + @@ -75426,7 +75449,7 @@ - + @@ -75450,10 +75473,10 @@ - + - + @@ -75462,18 +75485,18 @@ - + - + - + - + - + @@ -75482,15 +75505,15 @@ - + - + - + @@ -75499,7 +75522,7 @@ - + @@ -75509,7 +75532,7 @@ - + @@ -75517,13 +75540,13 @@ - + - + @@ -75534,13 +75557,13 @@ - + - + - + @@ -75557,16 +75580,16 @@ - + - + - + @@ -75576,7 +75599,7 @@ - + @@ -75587,27 +75610,27 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - + + + + + + + + @@ -75617,15 +75640,15 @@ - + - + - + @@ -75638,7 +75661,7 @@ - + @@ -75648,13 +75671,13 @@ - - + + - + @@ -75662,11 +75685,11 @@ - + - + @@ -75674,7 +75697,7 @@ - + @@ -75684,26 +75707,26 @@ - - + + - + - + - + - + @@ -75715,12 +75738,12 @@ - + - + @@ -75731,7 +75754,7 @@ - + @@ -75792,28 +75815,28 @@ - - - - - - - - - - - - + + - - + + - - + + + + + + + + + + + + @@ -75832,19 +75855,19 @@ - - + + - + - + @@ -75859,12 +75882,12 @@ - + - + @@ -75882,7 +75905,7 @@ - + @@ -75897,34 +75920,34 @@ - - - + + + - + - + - + - - + + - + @@ -75956,68 +75979,68 @@ - + - + - + - + - + - + - + - + - + - + - + - - - + + + @@ -76028,45 +76051,45 @@ - - - - - - + + + + + + - - - - - + + + + + - + - + - + - + @@ -76077,10 +76100,10 @@ - + - + @@ -76098,32 +76121,32 @@ - + - + - + - + - + - + - - - + + + @@ -76137,14 +76160,14 @@ - + - + - + @@ -76153,7 +76176,7 @@ - + @@ -76202,20 +76225,20 @@ - + - + - + - + - + @@ -76259,11 +76282,11 @@ - - + + - + @@ -76274,8 +76297,8 @@ - - + + @@ -76287,24 +76310,32 @@ - + - + + + + + + + + + - + - + - + @@ -76395,7 +76426,7 @@ - + @@ -76408,7 +76439,7 @@ - + @@ -76416,64 +76447,64 @@ - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + @@ -76485,16 +76516,16 @@ - - + + - + - + @@ -76502,10 +76533,10 @@ - + - + @@ -76513,23 +76544,23 @@ - + - + - + - + - + - + @@ -76543,7 +76574,7 @@ - + @@ -76563,25 +76594,25 @@ - - + + - - - - + + - - - - - - - + + + + + + + + + @@ -76590,7 +76621,7 @@ - + @@ -76635,7 +76666,7 @@ - + @@ -76650,18 +76681,18 @@ - + - + - + - + @@ -76671,43 +76702,43 @@ - + - + - + - + - + - + - + - + - + @@ -76732,14 +76763,14 @@ - - - - + + + + - + - + @@ -76752,7 +76783,7 @@ - + @@ -76763,7 +76794,7 @@ - + @@ -76774,7 +76805,7 @@ - + @@ -76782,7 +76813,7 @@ - + @@ -76792,13 +76823,13 @@ - + - + @@ -76812,15 +76843,15 @@ - + - + - + @@ -76831,28 +76862,28 @@ - - - + + + - + - + - + - + - + @@ -76864,30 +76895,30 @@ - + - + - + - - - + + + - + - + - + @@ -76895,16 +76926,16 @@ - + - + - + @@ -76943,7 +76974,7 @@ - + @@ -76951,16 +76982,16 @@ - + - + - + @@ -76970,10 +77001,10 @@ - + - + @@ -76983,7 +77014,7 @@ - + @@ -76995,44 +77026,44 @@ - + - - + + - - + + - + - + - + - + - + - + - + @@ -77043,7 +77074,7 @@ - + @@ -77055,33 +77086,33 @@ - + - + - + - + - + - + - - + + - + - + @@ -77093,7 +77124,7 @@ - + @@ -77108,10 +77139,10 @@ - + - + @@ -77122,13 +77153,13 @@ - + - + - + @@ -77137,32 +77168,32 @@ - + - + - + - + - + - + - + - + - + @@ -77179,33 +77210,33 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - - + + @@ -77215,34 +77246,34 @@ - + - + - - + + - + - + - + @@ -77256,39 +77287,39 @@ - + - - + + - - - + + + - - + + - + - + - + - + - + @@ -77297,14 +77328,14 @@ - + - + @@ -77359,18 +77390,18 @@ - + - + - + @@ -77382,7 +77413,7 @@ - + @@ -77393,7 +77424,7 @@ - + @@ -77408,7 +77439,7 @@ - + @@ -77419,19 +77450,19 @@ - - - + + + - - + + - + - + @@ -77452,7 +77483,7 @@ - + @@ -77490,9 +77521,9 @@ - - - + + + @@ -77504,21 +77535,21 @@ - - + + - + - + - + @@ -77548,21 +77579,21 @@ - - + + - - + + - + - + @@ -77621,26 +77652,26 @@ - - - - + + + + - + - + - - + + - + - - - - + + + + @@ -77652,8 +77683,8 @@ - - + + @@ -77708,20 +77739,20 @@ - - + + - + - + - + - + @@ -77733,7 +77764,7 @@ - + @@ -77741,27 +77772,27 @@ - + - + - + - + - + - + @@ -77776,7 +77807,7 @@ - + @@ -77786,21 +77817,21 @@ - - - - - - - + + + - - - + + + + + + + - + @@ -77809,27 +77840,27 @@ - - + + - + - + - - + + - + - + @@ -77839,23 +77870,23 @@ - - + + - + - - + + - + @@ -77863,20 +77894,20 @@ - + - - + + - + - + @@ -77897,41 +77928,41 @@ - + - + - - - + + + - + - + - - - + + + - - + + - - - + + + - + - + - + - + @@ -77943,12 +77974,12 @@ - + - + @@ -77969,7 +78000,7 @@ - + @@ -77986,27 +78017,27 @@ - + - - + + - + - + - - + + - + - + @@ -78016,42 +78047,42 @@ - - - + + + - - + + - + - + - - + + - + - + - + - + - + - + @@ -78060,7 +78091,7 @@ - + @@ -78072,11 +78103,11 @@ - + - + @@ -78084,13 +78115,13 @@ - + - + @@ -78108,18 +78139,18 @@ - + - + - + @@ -78127,13 +78158,13 @@ - + - + @@ -78141,10 +78172,10 @@ - + - + @@ -78158,15 +78189,15 @@ - - - - - - + + + + + + - + @@ -78176,19 +78207,19 @@ - + - - + + - + - + @@ -78199,30 +78230,30 @@ - + - + - + - + - + - + @@ -78385,14 +78416,14 @@ - - + + - + - + @@ -78401,11 +78432,11 @@ - + - + @@ -78413,7 +78444,7 @@ - + @@ -78434,50 +78465,50 @@ - - + + - + - + - - + + - + - + - + - + - + @@ -78490,39 +78521,39 @@ - - + + - + - - + + - + - + - + @@ -78540,22 +78571,22 @@ - + - + - + - + @@ -78564,7 +78595,7 @@ - + @@ -78573,16 +78604,16 @@ - + - + - + @@ -78593,7 +78624,7 @@ - + @@ -78602,20 +78633,20 @@ - - - + + + - + - + - + @@ -78624,27 +78655,27 @@ - + - + - + - - + + - + @@ -78656,7 +78687,7 @@ - + @@ -78668,11 +78699,11 @@ - + - + @@ -78695,7 +78726,7 @@ - + @@ -78710,7 +78741,7 @@ - + @@ -78722,7 +78753,7 @@ - + @@ -78749,78 +78780,78 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -78828,7 +78859,7 @@ - + @@ -78840,7 +78871,7 @@ - + @@ -78849,54 +78880,54 @@ - - - + + + - - + + - + - + - - - + + + - + - + - - + + - - + + - + - + @@ -78908,7 +78939,7 @@ - + @@ -78931,7 +78962,7 @@ - + @@ -79074,7 +79105,7 @@ - + @@ -79089,13 +79120,13 @@ - + - + @@ -79110,16 +79141,16 @@ - + - + - - + + @@ -79164,53 +79195,53 @@ - - + + - - + + - - + + - - + + - - + + - - - + + + - + - + - + - + - + @@ -79220,7 +79251,7 @@ - + @@ -79228,17 +79259,17 @@ - + - + - + - + @@ -79247,19 +79278,19 @@ - - + + - + - - + + - + @@ -79281,7 +79312,7 @@ - + @@ -79305,7 +79336,7 @@ - + @@ -79313,13 +79344,13 @@ - + - + @@ -79333,9 +79364,9 @@ - + - + @@ -79347,16 +79378,16 @@ - - + + - + - + @@ -79369,7 +79400,7 @@ - + @@ -79389,9 +79420,9 @@ - + - + @@ -79402,11 +79433,11 @@ - + - - + + @@ -79414,170 +79445,170 @@ - - + + - + - - + + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + @@ -79588,7 +79619,7 @@ - + @@ -79596,9 +79627,9 @@ - - - + + + @@ -79621,15 +79652,15 @@ - + - - + + - + @@ -79637,16 +79668,16 @@ - + - + - + @@ -79656,27 +79687,27 @@ - + - - + + - - + + - + - + @@ -79686,17 +79717,17 @@ - - + + - - + + - + @@ -79720,8 +79751,8 @@ - - + + @@ -79740,8 +79771,8 @@ - - + + @@ -79753,12 +79784,12 @@ - + - + @@ -79768,7 +79799,7 @@ - + @@ -79817,7 +79848,7 @@ - + @@ -79876,7 +79907,7 @@ - + @@ -79887,7 +79918,7 @@ - + @@ -79896,38 +79927,38 @@ - + - + - + - + - + - + - + @@ -79940,7 +79971,7 @@ - + @@ -79956,10 +79987,10 @@ - + - + @@ -79980,45 +80011,45 @@ - + - + - + - + - + - - - + + + - - - + + + - + @@ -80039,15 +80070,15 @@ - + - - + + @@ -80074,12 +80105,12 @@ - + - + @@ -80111,28 +80142,28 @@ - - - - - - - + + + + + + + - + - + - + - + @@ -80142,18 +80173,18 @@ - + - + - + @@ -80167,12 +80198,12 @@ - + - + @@ -80212,233 +80243,233 @@ - + - + - - + + - + - - + + - + - + - - + + - - + + - + - - + + - - + + - + - - + + - + - + - + - + - - + + - - + + - + - - + + - + - + - - + + - - + + - - + + - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - + + - - + + - + - + - + @@ -80446,267 +80477,267 @@ - + - + - + - + - - + + - - + + - - + + - + - - + + - + - + - + - - + + - + - + - - + + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - + - - + + - - + + - + - + - - + + - + - + - + - - + + - + - - + + - - + + - + - - + + - + - + - + - - + + - + - - + + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + @@ -80735,19 +80766,19 @@ - + - + - + @@ -80761,9 +80792,9 @@ - + - + @@ -80787,10 +80818,10 @@ - + - + @@ -80814,13 +80845,13 @@ - + - + @@ -80841,13 +80872,13 @@ - + - + - + @@ -80856,10 +80887,10 @@ - + - + @@ -80876,7 +80907,7 @@ - + @@ -80903,7 +80934,7 @@ - + @@ -80924,37 +80955,37 @@ - + - + - - + + - + - + - + - + - + @@ -80966,25 +80997,25 @@ - + - + - + - + - + - + @@ -80999,25 +81030,25 @@ - + - + - + - + - + - + @@ -81032,22 +81063,22 @@ - + - + - + - + - + @@ -81097,90 +81128,90 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -81188,7 +81219,7 @@ - + @@ -81200,49 +81231,49 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -81268,7 +81299,7 @@ - + @@ -81280,31 +81311,31 @@ - + - + - + - + - + - + - + - + - + @@ -81313,13 +81344,13 @@ - + - + - + @@ -81334,24 +81365,24 @@ - + - + - + - + - + @@ -81366,16 +81397,16 @@ - + - + - + - + @@ -81386,22 +81417,22 @@ - + - + - + - + - + @@ -81412,7 +81443,7 @@ - + @@ -81423,40 +81454,40 @@ - + - + - + - + - + - + - - + + - + - + - + - + @@ -81468,25 +81499,25 @@ - + - + - + - + - + @@ -81510,18 +81541,18 @@ - + - + - + - + @@ -81535,8 +81566,8 @@ - - + + @@ -81550,31 +81581,31 @@ - + - + - + - + - + - + - + - + - + @@ -81586,15 +81617,15 @@ - + - + - + @@ -81602,7 +81633,7 @@ - + @@ -81610,7 +81641,7 @@ - + @@ -81645,22 +81676,22 @@ - + - + - + - + @@ -81678,7 +81709,7 @@ - + @@ -81690,10 +81721,10 @@ - + - + @@ -81711,7 +81742,7 @@ - + @@ -81732,7 +81763,7 @@ - + @@ -81765,19 +81796,19 @@ - + - + - + - + @@ -81789,25 +81820,25 @@ - + - + - + - + - + - + @@ -81816,7 +81847,7 @@ - + @@ -81824,7 +81855,7 @@ - + @@ -81845,7 +81876,7 @@ - + @@ -81860,81 +81891,81 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -81964,9 +81995,9 @@ - + - + @@ -81978,10 +82009,10 @@ - + - + @@ -82026,7 +82057,7 @@ - + @@ -82044,7 +82075,7 @@ - + @@ -82052,7 +82083,7 @@ - + @@ -82081,7 +82112,7 @@ - + @@ -82090,10 +82121,10 @@ - + - + @@ -82141,10 +82172,10 @@ - + - + @@ -82168,7 +82199,7 @@ - + @@ -82207,7 +82238,7 @@ - + @@ -82237,18 +82268,18 @@ - + - + - + - + @@ -82256,7 +82287,7 @@ - + @@ -82273,12 +82304,12 @@ - + - + - + @@ -82308,15 +82339,15 @@ - + - + - + - + @@ -82355,10 +82386,10 @@ - + - + @@ -82373,34 +82404,34 @@ - + - + - + - + - + - + - + - + @@ -82418,22 +82449,22 @@ - + - + - + - + - + @@ -82444,7 +82475,7 @@ - + @@ -82455,7 +82486,7 @@ - + @@ -82473,36 +82504,36 @@ - + - + - + - + - + - + - + - + - - + + - + - + @@ -82513,15 +82544,15 @@ - + - + - + @@ -82533,19 +82564,19 @@ - + - + - + - + @@ -82554,7 +82585,7 @@ - + @@ -82563,7 +82594,7 @@ - + @@ -82572,24 +82603,24 @@ - + - + - + - + @@ -82609,44 +82640,44 @@ - + - + - + - + - - + + - + - + - + - + - + - + @@ -82655,7 +82686,7 @@ - + @@ -82669,60 +82700,60 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -82749,7 +82780,7 @@ - + @@ -82758,18 +82789,18 @@ - + - + - + - + @@ -82784,13 +82815,13 @@ - + - + @@ -82799,10 +82830,10 @@ - + - + @@ -82817,10 +82848,10 @@ - + - + @@ -82829,8 +82860,8 @@ - - + + @@ -82841,10 +82872,10 @@ - - + + - + @@ -82853,7 +82884,7 @@ - + @@ -82865,7 +82896,7 @@ - + @@ -82883,15 +82914,15 @@ - + - + - + @@ -82899,12 +82930,12 @@ - + - + @@ -82912,7 +82943,7 @@ - + @@ -82936,7 +82967,7 @@ - + @@ -82944,7 +82975,7 @@ - + @@ -83087,7 +83118,7 @@ - + @@ -83102,7 +83133,7 @@ - + @@ -83134,7 +83165,7 @@ - + @@ -83170,24 +83201,24 @@ - + - + - + - + - + - + @@ -83217,35 +83248,35 @@ - + - + - + - + - + - + - + - + - + @@ -83256,67 +83287,67 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -83328,7 +83359,7 @@ - + @@ -83342,13 +83373,13 @@ - + - + - + @@ -83357,8 +83388,8 @@ - - + + @@ -83366,34 +83397,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -83411,9 +83442,9 @@ - + - + @@ -83431,20 +83462,20 @@ - + - + - + - + - + - + @@ -83456,9 +83487,9 @@ - + - + @@ -83470,7 +83501,7 @@ - + @@ -83481,10 +83512,10 @@ - + - + @@ -83493,16 +83524,16 @@ - + - + - + @@ -83523,19 +83554,19 @@ - + - + - + - + - + @@ -83546,7 +83577,7 @@ - + @@ -83554,13 +83585,13 @@ - + - + - + @@ -83579,26 +83610,26 @@ - + - + - + - + - + - + @@ -83609,20 +83640,20 @@ - + - + - + - + - + @@ -83631,7 +83662,7 @@ - + @@ -83642,15 +83673,15 @@ - + - + - + - + @@ -83695,28 +83726,28 @@ - + - + - + - + - + - + - + - + @@ -83758,10 +83789,10 @@ - + - + @@ -83770,9 +83801,9 @@ - + - + @@ -83781,7 +83812,7 @@ - + @@ -83790,7 +83821,7 @@ - + @@ -83816,7 +83847,7 @@ - + @@ -83824,7 +83855,7 @@ - + @@ -83835,28 +83866,28 @@ - + - + - + - - - + + + - + @@ -83865,13 +83896,13 @@ - + - + @@ -83894,16 +83925,16 @@ - + - + - + - + @@ -83932,22 +83963,22 @@ - + - + - + - + - + @@ -83970,7 +84001,7 @@ - + @@ -83984,7 +84015,7 @@ - + @@ -83999,19 +84030,19 @@ - + - + - - + + @@ -84019,10 +84050,10 @@ - + - + @@ -84039,15 +84070,15 @@ - + - + - + @@ -84056,27 +84087,27 @@ - + - + - + - + - + - + - + - + @@ -84114,7 +84145,7 @@ - + @@ -84129,13 +84160,13 @@ - + - + - + @@ -84144,13 +84175,13 @@ - + - + - + @@ -84162,40 +84193,40 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -84204,27 +84235,27 @@ - + - + - + - + - + - + - + @@ -84233,102 +84264,102 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -84336,20 +84367,20 @@ - + - + - + - + @@ -84358,36 +84389,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -84396,16 +84427,16 @@ - + - + - + @@ -84414,37 +84445,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -84465,7 +84496,7 @@ - + @@ -84651,10 +84682,10 @@ - + - + @@ -84663,7 +84694,7 @@ - + @@ -84672,10 +84703,10 @@ - + - + @@ -84708,28 +84739,28 @@ - + - + - + - + - + @@ -84738,10 +84769,10 @@ - + - + @@ -84755,16 +84786,16 @@ - + - + - + @@ -84773,15 +84804,15 @@ - + - + - + @@ -84793,7 +84824,7 @@ - + @@ -84802,12 +84833,12 @@ - + - + - + @@ -84843,31 +84874,31 @@ - + - + - + - + - + - + - + - + - + @@ -84882,41 +84913,41 @@ - - + + - + - + - + - + - + - + - + - + - + @@ -84939,29 +84970,29 @@ - + - + - + - - - - + + + + - + - + - + @@ -84970,7 +85001,7 @@ - + @@ -84988,7 +85019,7 @@ - + @@ -84999,85 +85030,85 @@ - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85098,19 +85129,19 @@ - + - + - + - + - + @@ -85131,36 +85162,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -85214,7 +85245,7 @@ - + @@ -85256,7 +85287,7 @@ - + @@ -85264,55 +85295,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85326,7 +85357,7 @@ - + @@ -85337,27 +85368,27 @@ - + - + - + - + - + - + - + - + @@ -85366,9 +85397,9 @@ - + - + @@ -85377,7 +85408,7 @@ - + @@ -85394,7 +85425,7 @@ - + @@ -85415,46 +85446,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -85492,40 +85523,40 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -85537,43 +85568,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -85587,18 +85618,18 @@ - + - + - + - + @@ -85613,25 +85644,25 @@ - + - + - + - + - + @@ -85655,13 +85686,13 @@ - + - + - + @@ -85673,9 +85704,9 @@ - + - + @@ -85693,7 +85724,7 @@ - + @@ -85713,7 +85744,7 @@ - + @@ -85721,7 +85752,7 @@ - + @@ -85729,7 +85760,7 @@ - + @@ -85738,20 +85769,20 @@ - + - + - + - + - + - + @@ -85766,37 +85797,37 @@ - + - + - + - + - + - + - + @@ -85808,16 +85839,16 @@ - + - + - + - + @@ -85831,7 +85862,7 @@ - + @@ -85840,16 +85871,16 @@ - + - + - + - + @@ -85864,25 +85895,25 @@ - + - + - + - + - + @@ -85890,13 +85921,13 @@ - + - + - + @@ -85913,7 +85944,7 @@ - + @@ -85925,41 +85956,41 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -85968,83 +85999,83 @@ - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -86053,13 +86084,13 @@ - + - + @@ -86086,7 +86117,7 @@ - + @@ -86110,7 +86141,7 @@ - + @@ -86119,10 +86150,10 @@ - + - + @@ -86137,13 +86168,13 @@ - + - + @@ -86158,7 +86189,7 @@ - + @@ -86185,7 +86216,7 @@ - + @@ -86200,13 +86231,13 @@ - + - + @@ -86218,13 +86249,13 @@ - + - + - + @@ -86241,19 +86272,19 @@ - + - + - + - + - + @@ -86261,19 +86292,19 @@ - + - + - + - + @@ -86288,22 +86319,22 @@ - + - + - + - + - + @@ -86327,7 +86358,7 @@ - + @@ -86339,22 +86370,22 @@ - + - - + + - + - + @@ -86362,20 +86393,20 @@ - + - - - + + + - + - + @@ -86390,15 +86421,15 @@ - + - + - + @@ -86407,7 +86438,7 @@ - + @@ -86422,102 +86453,102 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + @@ -86534,9 +86565,9 @@ - + - + @@ -86545,13 +86576,13 @@ - + - + - + @@ -86560,19 +86591,19 @@ - + - + - + - + @@ -86596,9 +86627,9 @@ - + - + @@ -86607,13 +86638,13 @@ - + - + @@ -86625,15 +86656,15 @@ - + - + - + @@ -86641,7 +86672,7 @@ - + @@ -86650,23 +86681,23 @@ - + - + - + - + - + - + @@ -86743,44 +86774,44 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -86881,7 +86912,7 @@ - + @@ -86889,16 +86920,16 @@ - + - + - + @@ -86907,8 +86938,8 @@ - - + + @@ -86925,19 +86956,19 @@ - + - + - - - - + + + + @@ -86960,11 +86991,11 @@ - + - - + + @@ -86978,29 +87009,29 @@ - - + + - + - + - + - + - + - + @@ -87018,10 +87049,10 @@ - + - + @@ -87029,34 +87060,34 @@ - + - + - - - + + + - + - + - + - + - + - + - + @@ -87068,7 +87099,7 @@ - + @@ -87089,22 +87120,22 @@ - + - + - + - + - + @@ -87119,7 +87150,7 @@ - + @@ -87128,25 +87159,25 @@ - + - + - + - + - + - + - + @@ -87161,7 +87192,7 @@ - + @@ -87173,10 +87204,10 @@ - + - + @@ -87185,10 +87216,10 @@ - + - + @@ -87196,7 +87227,7 @@ - + @@ -87210,7 +87241,7 @@ - + @@ -87237,7 +87268,7 @@ - + @@ -87263,15 +87294,15 @@ - + - + - + - + @@ -87279,48 +87310,48 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -87335,9 +87366,9 @@ - + - + @@ -87346,7 +87377,7 @@ - + @@ -87357,10 +87388,10 @@ - + - + @@ -87368,27 +87399,27 @@ - + - + - + - + - + - + - + - + @@ -87403,15 +87434,15 @@ - + - + - + - + @@ -87420,10 +87451,10 @@ - + - + @@ -87431,12 +87462,12 @@ - + - + - + @@ -87469,7 +87500,7 @@ - + @@ -87478,7 +87509,7 @@ - + @@ -87490,30 +87521,30 @@ - + - + - + - + - + - + - + @@ -87522,13 +87553,13 @@ - + - + - + @@ -87558,10 +87589,10 @@ - + - + @@ -87570,7 +87601,7 @@ - + @@ -87603,13 +87634,13 @@ - + - + - + @@ -87624,18 +87655,18 @@ - + - + - + - + @@ -87646,64 +87677,64 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -87711,7 +87742,7 @@ - + @@ -87720,16 +87751,16 @@ - - + + - + - + - + @@ -87740,7 +87771,7 @@ - + @@ -87757,7 +87788,7 @@ - + @@ -87782,7 +87813,7 @@ - + @@ -87914,7 +87945,7 @@ - + @@ -87922,9 +87953,9 @@ - + - + @@ -87939,7 +87970,7 @@ - + @@ -87948,7 +87979,7 @@ - + @@ -87963,23 +87994,23 @@ - + - + - + - + @@ -87989,9 +88020,9 @@ - + - + @@ -87999,7 +88030,7 @@ - + @@ -88018,10 +88049,10 @@ - + - + @@ -88047,13 +88078,13 @@ - + - + - + @@ -88067,7 +88098,7 @@ - + @@ -88075,10 +88106,10 @@ - + - + @@ -88095,7 +88126,7 @@ - + @@ -88106,7 +88137,7 @@ - + @@ -88114,16 +88145,16 @@ - - + + - + - + @@ -88135,7 +88166,7 @@ - + @@ -88144,7 +88175,7 @@ - + @@ -88156,19 +88187,19 @@ - + - + - + - + - + @@ -88177,20 +88208,20 @@ - + - + - + - + - + @@ -88199,24 +88230,24 @@ - + - + - - + + - + - + @@ -88245,15 +88276,15 @@ - + - + - + @@ -88282,7 +88313,7 @@ - + @@ -88290,7 +88321,7 @@ - + @@ -88298,29 +88329,29 @@ - + - + - + - + - + - + @@ -88334,12 +88365,12 @@ - + - + - + @@ -88348,14 +88379,14 @@ - - - + + + - + @@ -88372,19 +88403,19 @@ - + - + - + - + @@ -88459,7 +88490,7 @@ - + @@ -88504,10 +88535,10 @@ - + - + @@ -88528,16 +88559,16 @@ - + - + - + - + @@ -88551,7 +88582,7 @@ - + @@ -88590,7 +88621,7 @@ - + @@ -88599,7 +88630,7 @@ - + @@ -88607,14 +88638,14 @@ - + - + @@ -88625,35 +88656,35 @@ - + - + - + - + - + - + - + - + - + - + @@ -88665,54 +88696,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -88720,18 +88751,18 @@ - + - + - + - + - + @@ -88739,18 +88770,18 @@ - + - + - + @@ -88760,94 +88791,94 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -88868,7 +88899,7 @@ - + @@ -88876,12 +88907,12 @@ - + - + @@ -88892,7 +88923,7 @@ - + @@ -88901,13 +88932,13 @@ - + - + - + @@ -88920,79 +88951,79 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -89003,7 +89034,7 @@ - + @@ -89020,7 +89051,7 @@ - + @@ -89037,34 +89068,34 @@ - + - + - + - + - + - + - + - + - + @@ -89079,9 +89110,9 @@ - + - + @@ -89090,7 +89121,7 @@ - + @@ -89103,427 +89134,427 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - + + + + + + + + + + - + @@ -89533,141 +89564,141 @@ - + - - - - - - + + + + + + - - - + + + - - - + + + - - - - - - - - - - - + + - - - - + + - - + + + - - - + + + + - - + - - + + + - - + + + + + + + + + + + - - + + - + - + - + - + - + - - - - - - - - - - - - - + - + + + + + + + + + + + + + - + - + - + @@ -89675,72 +89706,72 @@ - - - - - - - - - - - + + + + + + + - + + + + + - - + + - - + + - - - - - - - - - - + + - - + - - + - + + + + + + + + + + + - - + + @@ -89748,18 +89779,18 @@ - - - + + + - - + + - - + + @@ -89767,203 +89798,203 @@ - - - - - - - - - + - - - - - + - + + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - + - - - - - + + - - + + - - - + + + + + - + - - + + - - + + + + + + + + - - + - - - - - + + - + + + + + + - - - - - - - - - - + + + + - - + + + + + + + + - + + + + + - - + + - + - - - + + + - + + - - + - - + + - + - - - - - - - - - - - - - - + + + + - + + + + + + + + + + + - + + - - + - - + + - - + + @@ -89971,405 +90002,405 @@ - - + + - - - + + + - - + + - - + + - - + + - + - - - - - - - - - - + + + + + + + + + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - + + + + + + + + - - + + + + + + - - + + - + - - - - - - - - - - + - - - - - - - - - - - + + + + + + + + + - - - - + + - + + + - + + - - - - + - + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - + + + + - - - + + + - + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - + - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + - - - + - + + + + + + + + + - - + - + + + + + + - - + + - + - - - - - - + - - + + - - - - - - - + + + - + + + + + + + + + + - + - - + + - + - + @@ -90377,7 +90408,7 @@ - + @@ -90385,7 +90416,7 @@ - + @@ -90393,47 +90424,47 @@ - + - + - + - + - - + + - + - + - + - + - + @@ -90441,8 +90472,8 @@ - - + + @@ -90453,29 +90484,29 @@ - - + + - + - + - - + + - + @@ -90486,10 +90517,10 @@ - + - + @@ -90511,7 +90542,7 @@ - + @@ -90523,8 +90554,8 @@ - - + + @@ -90535,7 +90566,7 @@ - + @@ -90548,7 +90579,7 @@ - + @@ -90556,16 +90587,16 @@ - - + + - + - + - + @@ -90577,11 +90608,11 @@ - + - + @@ -90602,8 +90633,8 @@ - - + + @@ -90619,7 +90650,7 @@ - + @@ -90642,28 +90673,28 @@ - + - + - + - + - + - + - + - + @@ -90678,18 +90709,18 @@ - + - + - + - + - + @@ -90704,7 +90735,7 @@ - + @@ -90712,28 +90743,28 @@ - + - + - + - + - + - + - + @@ -90744,82 +90775,82 @@ - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - + - - - - - - - - - - - + - + - - - - + + + - + + + + + + + + + + + + - + - + - + - + - + @@ -90827,10 +90858,10 @@ - + - + @@ -90839,12 +90870,12 @@ - + - + @@ -90852,69 +90883,69 @@ - - - - - - - + + + + + + + - + - + - + - - - + + + - + - + - + - - + + - + - - - + + + - - - + + + - + - - + + @@ -90925,23 +90956,23 @@ - + - + - - + + - - + + @@ -90953,7 +90984,7 @@ - + @@ -90979,18 +91010,18 @@ - + - + - + - + @@ -91005,9 +91036,9 @@ - + - + @@ -91019,37 +91050,37 @@ - - - + + + - - + + - + - - + + - + - + - + - + @@ -91067,7 +91098,7 @@ - + @@ -91082,36 +91113,36 @@ - + - + - + - + - + - + - + - + @@ -91128,7 +91159,7 @@ - + @@ -91139,42 +91170,42 @@ - - - + + + - - - - - + + + + + - + - - + + - - + + - + - + - - + + - - + + @@ -91194,7 +91225,7 @@ - + @@ -91202,7 +91233,7 @@ - + @@ -91212,7 +91243,7 @@ - + @@ -91223,7 +91254,7 @@ - + @@ -91235,7 +91266,7 @@ - + @@ -91249,7 +91280,7 @@ - + @@ -91264,7 +91295,7 @@ - + @@ -91282,7 +91313,7 @@ - + @@ -91310,13 +91341,13 @@ - - + + - - + + @@ -91324,7 +91355,7 @@ - + @@ -91335,12 +91366,12 @@ - + - - + + @@ -91361,14 +91392,14 @@ - + - + @@ -91385,14 +91416,14 @@ - + - - + + @@ -91406,19 +91437,19 @@ - - + + - - + + - + - + @@ -91429,9 +91460,9 @@ - + - + @@ -91440,7 +91471,7 @@ - + @@ -91449,7 +91480,7 @@ - + @@ -91467,7 +91498,7 @@ - + @@ -91476,7 +91507,7 @@ - + @@ -91484,9 +91515,9 @@ - + - + @@ -91501,7 +91532,7 @@ - + @@ -91525,7 +91556,7 @@ - + @@ -91563,10 +91594,10 @@ - + - + @@ -91578,7 +91609,7 @@ - + @@ -91593,31 +91624,31 @@ - + - + - + - + - - - - - - + + + + + + @@ -91630,11 +91661,11 @@ - + - + @@ -91643,7 +91674,7 @@ - + @@ -91671,11 +91702,11 @@ - + - + @@ -91684,7 +91715,7 @@ - + @@ -91702,13 +91733,13 @@ - + - + @@ -91718,11 +91749,11 @@ - + - - + + @@ -91745,35 +91776,35 @@ - + - + - + - + - + - + @@ -91813,42 +91844,36 @@ - - - - - - - - + + - + - + - + - + - + - + - + @@ -91900,32 +91925,32 @@ - + - + - + - + - + - + @@ -91933,12 +91958,12 @@ - + - + @@ -91965,7 +91990,7 @@ - + @@ -91994,8 +92019,8 @@ - - + + @@ -92008,51 +92033,51 @@ - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -92060,35 +92085,35 @@ - - + + - + - + - + - + - + - - - + + + @@ -92113,19 +92138,19 @@ - + - + - - + + @@ -92133,14 +92158,14 @@ - + - + @@ -92201,7 +92226,7 @@ - + @@ -92226,16 +92251,16 @@ - + - + - + @@ -92247,10 +92272,10 @@ - + - + @@ -92259,7 +92284,7 @@ - + @@ -92272,7 +92297,7 @@ - + @@ -92284,7 +92309,7 @@ - + @@ -92295,17 +92320,17 @@ - + - + - + @@ -92316,18 +92341,18 @@ - + - + - + - + - + @@ -92344,19 +92369,19 @@ - + - + - + - + - + @@ -92364,36 +92389,36 @@ - - + + - - + + - - + + - + - + - - + + - + @@ -92404,7 +92429,7 @@ - + @@ -92419,38 +92444,38 @@ - + - + - + - + - + - + - + - + - + @@ -92486,7 +92511,7 @@ - + @@ -92500,8 +92525,8 @@ - - + + @@ -92521,7 +92546,7 @@ - + @@ -92532,27 +92557,27 @@ - - + + - + - + - + - - + + - + @@ -92574,7 +92599,7 @@ - + @@ -92603,7 +92628,7 @@ - + @@ -92618,7 +92643,7 @@ - + @@ -92637,7 +92662,7 @@ - + @@ -92659,11 +92684,11 @@ - + - + @@ -92683,8 +92708,8 @@ - - + + @@ -92692,30 +92717,30 @@ - + - + - - - - + + + + - + - + - + @@ -92752,15 +92777,15 @@ - + - + - + @@ -92774,7 +92799,7 @@ - + @@ -92782,7 +92807,7 @@ - + @@ -92790,24 +92815,24 @@ - + - + - + - + - + - + @@ -92819,20 +92844,20 @@ - + - + - + - + - + @@ -92844,15 +92869,15 @@ - + - + - + @@ -92860,7 +92885,7 @@ - + @@ -92880,10 +92905,10 @@ - - - - + + + + @@ -92899,7 +92924,7 @@ - + @@ -92917,7 +92942,7 @@ - + @@ -92960,11 +92985,11 @@ - + - + @@ -92998,7 +93023,7 @@ - + @@ -93036,8 +93061,8 @@ - - + + @@ -93050,44 +93075,44 @@ - + - - + + - - + + - - + + - + - - + + - + - - - + + + - + - + @@ -93096,15 +93121,15 @@ - + - + - + - + @@ -93115,7 +93140,7 @@ - + @@ -93123,22 +93148,22 @@ - + - + - + - + - + - + @@ -93146,25 +93171,25 @@ - + - + - + - + @@ -93191,10 +93216,10 @@ - + - + @@ -93257,7 +93282,7 @@ - + @@ -93296,7 +93321,7 @@ - + @@ -93317,13 +93342,13 @@ - + - + @@ -93332,28 +93357,28 @@ - + - + - + - + - + - - + + - + - + @@ -93376,37 +93401,37 @@ - + - + - + - + - + - + - + - + - + @@ -93418,10 +93443,10 @@ - + - + @@ -93433,10 +93458,10 @@ - + - + @@ -93622,7 +93647,7 @@ - + @@ -93748,13 +93773,13 @@ - + - + - + @@ -93781,10 +93806,10 @@ - + - + @@ -93826,7 +93851,7 @@ - + @@ -93841,10 +93866,10 @@ - + - + @@ -93853,13 +93878,13 @@ - + - + @@ -93889,46 +93914,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -93942,15 +93967,15 @@ - + - + - + @@ -93965,7 +93990,7 @@ - + @@ -93977,7 +94002,7 @@ - + @@ -93998,7 +94023,7 @@ - + @@ -94007,7 +94032,7 @@ - + @@ -94015,7 +94040,7 @@ - + @@ -94035,7 +94060,7 @@ - + @@ -94067,18 +94092,18 @@ - + - + - + - + @@ -94102,12 +94127,12 @@ - + - + - + @@ -94143,7 +94168,7 @@ - + @@ -94155,7 +94180,7 @@ - + @@ -94170,7 +94195,7 @@ - + @@ -94178,10 +94203,10 @@ - + - + @@ -94190,15 +94215,15 @@ - + - + - + - + @@ -94210,22 +94235,22 @@ - + - + - + - + @@ -94258,7 +94283,7 @@ - + @@ -94426,16 +94451,16 @@ - + - + - + - + @@ -94447,13 +94472,13 @@ - + - + @@ -94464,94 +94489,94 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -94559,189 +94584,189 @@ - - + + - - + + - - + + - + - - - + + + - - + + - - + + - + - + - + - + - + - + - + - - - - - - - - - - - + - - + + - + - - + + + - - + + + - + + + + + + + + + - - - - - - - - - - - - - + + - + + + - + - - + - + + - - + + - + + + + + + + + + + - + - - + + - + - + - + - + - + @@ -94754,21 +94779,21 @@ - + - + - + - + - - - - + + + + @@ -94776,74 +94801,74 @@ - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -94852,7 +94877,7 @@ - + @@ -94861,59 +94886,59 @@ - + - + - + - - - + + + - - + + - - + + - - + + - + - - - + + + - - - + + + - + - - + + @@ -94925,17 +94950,17 @@ - - + + - + - + @@ -94943,34 +94968,34 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -94978,16 +95003,16 @@ - + - + - + - + @@ -94996,18 +95021,18 @@ - + - - - + + + - + @@ -95015,95 +95040,95 @@ - - + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - + @@ -95111,25 +95136,25 @@ - + - + - - - + + + - + - + @@ -95137,140 +95162,140 @@ - - + + - + - + - + - - - + + + - - + + - + - + - + - + - + - + - + - + - - + + - + - - - - + + + + - + - - - + + + - - - + + + - + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - + @@ -95278,7 +95303,7 @@ - + @@ -95286,7 +95311,7 @@ - + @@ -95294,48 +95319,48 @@ - + - - - + + + - - + + - - + + - - + + - + - + - + - + - - - + + + @@ -95351,63 +95376,63 @@ - + - + - - + + - - + + - + - + - + - + - + - + - + - - + + - + @@ -95416,8 +95441,8 @@ - - + + @@ -95425,25 +95450,25 @@ - + - + - + - + - + - + - + @@ -95463,22 +95488,22 @@ - - - - - - - - + + + + + + + + - + - - - - + + + + @@ -95487,8 +95512,8 @@ - - + + @@ -95502,69 +95527,69 @@ - + - + - - + + - + - - - + + + - - + + - - - + + + - - - - - - - - - - - - - + + + + + + + - - + + - + + + + + + + - + @@ -95578,13 +95603,13 @@ - + - + @@ -95618,7 +95643,7 @@ - + @@ -95648,7 +95673,7 @@ - + @@ -95666,7 +95691,7 @@ - + @@ -95675,29 +95700,61 @@ - + + + + + + + + + - + - + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - + - + @@ -95705,6 +95762,9 @@ + + + @@ -95718,61 +95778,61 @@ - + - - + + - - + + - - + + - - + + - - + + - + - + - + - + @@ -95780,7 +95840,7 @@ - + @@ -95788,26 +95848,26 @@ - - + + - - + + - + - + @@ -95833,43 +95893,43 @@ - + - + - + - + - + - + - + - - + + @@ -95878,9 +95938,9 @@ - - - + + + @@ -95896,12 +95956,12 @@ - + - + - + @@ -95916,13 +95976,13 @@ - + - + - + @@ -95934,55 +95994,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -95997,16 +96057,16 @@ - + - + - + @@ -96018,56 +96078,56 @@ - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + @@ -96100,7 +96160,7 @@ - + @@ -96108,7 +96168,7 @@ - + @@ -96125,15 +96185,15 @@ - + - + - + - + @@ -96145,7 +96205,7 @@ - + @@ -96171,7 +96231,7 @@ - + @@ -96183,10 +96243,10 @@ - + - + @@ -96212,9 +96272,9 @@ - + - + @@ -96226,9 +96286,9 @@ - + - + @@ -96237,9 +96297,9 @@ - + - + @@ -96251,7 +96311,7 @@ - + @@ -96262,10 +96322,10 @@ - + - + @@ -96276,7 +96336,7 @@ - + @@ -96299,24 +96359,24 @@ - + - + - + - + - + - + - + @@ -96327,7 +96387,7 @@ - + @@ -96341,9 +96401,9 @@ - + - + @@ -96355,7 +96415,7 @@ - + @@ -96369,25 +96429,25 @@ - + - + - + - + - + - + - + @@ -96398,7 +96458,7 @@ - + @@ -96409,16 +96469,16 @@ - + - + - + - + @@ -96435,114 +96495,114 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - + + + + - + - - - + + + - + - + - + - - + + - - + + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - - + + - - + + - - - + + + - + @@ -96552,32 +96612,249 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - - + + - + - - - + + + @@ -96590,8 +96867,8 @@ - - + + @@ -96602,23 +96879,23 @@ - - - + + + - + - + - + - + @@ -96627,38 +96904,20 @@ - - - - - - - - - - - - - - - - - - + - + - - - - + + + @@ -96669,40 +96928,40 @@ - + - + - + - + - + - + - - - + + + @@ -96710,7 +96969,7 @@ - + @@ -96718,13 +96977,13 @@ - + - + @@ -96732,45 +96991,45 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -96836,10 +97095,10 @@ - + - + @@ -96851,7 +97110,7 @@ - + @@ -96866,7 +97125,7 @@ - + @@ -96889,16 +97148,16 @@ - + - + - + @@ -96906,29 +97165,21 @@ - - - - - - - - - + - + - + - + - + @@ -96936,7 +97187,7 @@ - + @@ -96944,7 +97195,7 @@ - + @@ -96955,15 +97206,15 @@ - + - + - + @@ -96992,24 +97243,24 @@ - + - + - + - + - + - + @@ -97027,13 +97278,13 @@ - + - + - + @@ -97057,34 +97308,34 @@ - + - + - + - + - + - + - + - + @@ -97101,20 +97352,20 @@ - + - + - + - + - + - + @@ -97123,18 +97374,18 @@ - + - + - + - + - + @@ -97149,13 +97400,13 @@ - + - + - + @@ -97164,13 +97415,13 @@ - + - + - + @@ -97250,7 +97501,7 @@ - + @@ -97271,13 +97522,13 @@ - + - + - + @@ -97292,7 +97543,7 @@ - + @@ -97304,10 +97555,10 @@ - + - + @@ -97322,13 +97573,13 @@ - + - + @@ -97343,21 +97594,21 @@ - + - + - + - + - + @@ -97365,10 +97616,10 @@ - + - + @@ -97382,7 +97633,7 @@ - + @@ -97396,23 +97647,23 @@ - + - + - + - + - + - + @@ -97424,319 +97675,319 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -97762,23 +98013,23 @@ - + - + - + - + - + - + - + @@ -97787,7 +98038,7 @@ - + @@ -97801,32 +98052,32 @@ - + - + - + - + - + - + - + - + - + - + @@ -97834,40 +98085,40 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -97875,7 +98126,7 @@ - + @@ -97898,10 +98149,10 @@ - + - + @@ -97912,12 +98163,12 @@ - + - + - + @@ -97935,7 +98186,7 @@ - + @@ -97945,7 +98196,7 @@ - + @@ -97956,7 +98207,7 @@ - + @@ -97965,74 +98216,74 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -98041,38 +98292,38 @@ - + - + - + - + - + - + - + - + - + - + @@ -98096,587 +98347,587 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + + + + + + + + + - + - - + + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + - - - + + + + + - - - - - + + - - - + + - - - + + + - - - + + - - - - - + + + - - - - - - - + + + - - - + + + + - - - + + + - - - - + + + + - - - - + + + - - - + + + - - + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - + + + + - - - - + + + - - - - + + + - - - - + + + - - - - + - - - - + + - - - - + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - + + - - + + @@ -98685,44 +98936,44 @@ - - + + - + - + - - + + - + - + - + - + @@ -98733,108 +98984,108 @@ - + - - + + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + @@ -98843,254 +99094,254 @@ - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -99099,9 +99350,9 @@ - + - + @@ -99110,7 +99361,7 @@ - + @@ -99119,37 +99370,37 @@ - + - + - + - + - + - + - + - - + + - + @@ -99158,53 +99409,53 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + @@ -99218,67 +99469,67 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -99286,9 +99537,9 @@ - + - + @@ -99297,7 +99548,7 @@ - + @@ -99305,19 +99556,19 @@ - + - + - + - + - + @@ -99332,32 +99583,32 @@ - + - + - + - + - + - + - + - + - + @@ -99371,22 +99622,22 @@ - + - + - + - + - + - + @@ -99404,7 +99655,7 @@ - + @@ -99415,7 +99666,7 @@ - + @@ -99426,13 +99677,13 @@ - + - + @@ -99443,107 +99694,107 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - + + + + + + + + - - - - + + + + - + - - - + + + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + - + - + - + - + - - - + + + - + - + @@ -99554,42 +99805,42 @@ - + - + - + - - + + - - + + - + - + - + - + - + @@ -99598,40 +99849,40 @@ - + - + - - + + - + - + - + - + - + - + - - + + @@ -99642,22 +99893,22 @@ - + - + - + - + - + @@ -99666,7 +99917,7 @@ - + @@ -99677,7 +99928,7 @@ - + @@ -99718,7 +99969,7 @@ - + @@ -99732,50 +99983,50 @@ - + - - - - - - - - - - - - - - - - - - + + + + + + + - + + + + - - + + + + + + + + + + - + - + - + - + @@ -99789,111 +100040,111 @@ - - + + - + - + - + - + - + - + - - + + - - + + - - + + - + - - + + - + - + - + - - + + - - - + + + - - - + + + - - - + + + - - + + - - + + - - + + - - - - + + + + - + - + @@ -99910,7 +100161,7 @@ - + @@ -99921,27 +100172,8 @@ - - - - - - - - - - - - - - - - - - - - + @@ -99949,200 +100181,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -100151,32 +100192,50 @@ - + + + + + + + + + + + - + - + - + - + - + - + - + + + + + + + + + - + - - + + @@ -100186,14 +100245,14 @@ - + - - + + @@ -100208,14 +100267,14 @@ - + - + - + @@ -100229,24 +100288,24 @@ - + - + - + - + - + - + - + @@ -100258,23 +100317,23 @@ - + - + - + - - - + + + - + - - + + @@ -100283,26 +100342,34 @@ - + - + - - + + - - - + + + + + + + + + + + - + - + @@ -100310,27 +100377,27 @@ - + - + - - + + - + - + @@ -100345,7 +100412,7 @@ - + @@ -100357,9 +100424,9 @@ - + - + @@ -100368,7 +100435,7 @@ - + @@ -100376,19 +100443,19 @@ - + - + - + @@ -100414,24 +100481,24 @@ - - + + - + - + - + - + @@ -100440,7 +100507,7 @@ - + @@ -100448,19 +100515,19 @@ - + - + - + - - + + @@ -100468,7 +100535,7 @@ - + @@ -100479,7 +100546,7 @@ - + @@ -100493,12 +100560,12 @@ - + - + @@ -100507,7 +100574,7 @@ - + @@ -100521,63 +100588,63 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -100591,21 +100658,21 @@ - + - + - + - + - + @@ -100622,61 +100689,61 @@ - + - + - + - + - + - + - + - - + + - + - + - + - + - + + + - - - - - - - - - - + + + + + + + + - + @@ -100685,99 +100752,99 @@ - + - - - + + + - - + + - - - + + + - + - - + + - + - - + + - - + + - - + + - - + + - - - - + + + + - - - + + + - + - + - + - + - + @@ -100791,135 +100858,135 @@ - - - - + + + + - + - + - + - + - + - + - + - + - - + + - + - + - + - - + + - + + + + + - + - - - - - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + @@ -100946,13 +101013,13 @@ - + - + @@ -100988,13 +101055,13 @@ - + - + @@ -101018,10 +101085,10 @@ - + - + @@ -101048,7 +101115,7 @@ - + @@ -101057,16 +101124,16 @@ - + - + - + - + @@ -101075,25 +101142,25 @@ - + - + - + - + - + - + @@ -101132,18 +101199,18 @@ - + - + - + - + @@ -101151,9 +101218,9 @@ - + - + @@ -101177,7 +101244,7 @@ - + @@ -101185,13 +101252,13 @@ - + - + @@ -101211,12 +101278,12 @@ - + - + - + @@ -101231,7 +101298,7 @@ - + @@ -101242,7 +101309,7 @@ - + @@ -101265,19 +101332,19 @@ - + - + - + - + @@ -101291,15 +101358,15 @@ - + - + - + - + @@ -101308,7 +101375,7 @@ - + @@ -101317,7 +101384,7 @@ - + @@ -101335,10 +101402,10 @@ - + - + @@ -101349,7 +101416,7 @@ - + @@ -101360,12 +101427,12 @@ - + - + @@ -101374,7 +101441,7 @@ - + @@ -101386,7 +101453,7 @@ - + @@ -101398,16 +101465,16 @@ - + - + - + @@ -101416,13 +101483,13 @@ - + - + - + @@ -101443,38 +101510,38 @@ - + - + - + - + - + - + - + - + - + @@ -101482,15 +101549,15 @@ - + - + - + @@ -101498,18 +101565,18 @@ - + - + - + - + @@ -101530,10 +101597,10 @@ - + - + @@ -101545,13 +101612,13 @@ - + - + - + @@ -101560,7 +101627,7 @@ - + @@ -101569,13 +101636,13 @@ - + - + - + @@ -101611,7 +101678,7 @@ - + @@ -101623,7 +101690,7 @@ - + @@ -101641,18 +101708,18 @@ - + - + - + - + @@ -101669,16 +101736,16 @@ - + - + - + @@ -101686,7 +101753,7 @@ - + @@ -101712,33 +101779,33 @@ - + - + - + - + - + - + - + - + - + - + @@ -101753,13 +101820,13 @@ - + - + @@ -101768,12 +101835,12 @@ - + - + - + @@ -101806,7 +101873,7 @@ - + @@ -101815,13 +101882,13 @@ - + - + @@ -101835,15 +101902,15 @@ - + - + - + - + @@ -101852,10 +101919,10 @@ - + - + @@ -101866,15 +101933,15 @@ - + - + - + @@ -101889,7 +101956,7 @@ - + @@ -101900,12 +101967,12 @@ - + - + - + @@ -101917,15 +101984,15 @@ - + - + - + - + @@ -101934,22 +102001,22 @@ - + - + - + - + - + @@ -101963,7 +102030,7 @@ - + @@ -101977,15 +102044,15 @@ - + - + - + - + @@ -101994,7 +102061,7 @@ - + @@ -102002,74 +102069,74 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -102077,16 +102144,16 @@ - + - + - + - + @@ -102095,39 +102162,39 @@ - + - + - + - + - + - + @@ -102135,24 +102202,24 @@ - + - + - + - + - + - + - + @@ -102164,7 +102231,7 @@ - + @@ -102175,7 +102242,7 @@ - + @@ -102183,15 +102250,15 @@ - + - + - + - + @@ -102205,18 +102272,18 @@ - + - + - + - + @@ -102225,15 +102292,15 @@ - + - + - + @@ -102253,27 +102320,27 @@ - + - + - + - + - + - + @@ -102281,7 +102348,7 @@ - + @@ -102292,10 +102359,10 @@ - + - + @@ -102324,336 +102391,336 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -102661,7 +102728,7 @@ - + @@ -102670,12 +102737,12 @@ - + - + - + @@ -102690,19 +102757,19 @@ - + - + - + - + @@ -102714,22 +102781,22 @@ - + - + - + - + - + @@ -102744,10 +102811,10 @@ - + - + @@ -102800,13 +102867,13 @@ - + - + @@ -102817,13 +102884,13 @@ - + - + @@ -102838,7 +102905,7 @@ - + @@ -102853,7 +102920,7 @@ - + @@ -102867,7 +102934,7 @@ - + @@ -102875,48 +102942,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -102927,12 +102994,12 @@ - + - + @@ -102962,10 +103029,10 @@ - + - + @@ -102974,7 +103041,7 @@ - + @@ -103007,7 +103074,7 @@ - + @@ -103016,10 +103083,10 @@ - + - + @@ -103028,21 +103095,21 @@ - + - + - + - + - + @@ -103053,7 +103120,7 @@ - + @@ -103091,16 +103158,16 @@ - + - + - + - + @@ -103118,10 +103185,10 @@ - + - + @@ -103139,13 +103206,13 @@ - + - + - + @@ -103166,7 +103233,7 @@ - + @@ -103187,7 +103254,7 @@ - + @@ -103216,7 +103283,7 @@ - + @@ -103227,7 +103294,7 @@ - + @@ -103235,7 +103302,7 @@ - + @@ -103252,10 +103319,10 @@ - + - + @@ -103293,7 +103360,7 @@ - + @@ -103328,7 +103395,7 @@ - + @@ -103408,7 +103475,7 @@ - + @@ -103417,9 +103484,9 @@ - + - + @@ -103467,7 +103534,7 @@ - + @@ -103476,12 +103543,12 @@ - + - + - + @@ -103510,9 +103577,9 @@ - + - + @@ -103527,7 +103594,7 @@ - + @@ -103535,9 +103602,9 @@ - + - + @@ -103546,7 +103613,7 @@ - + @@ -103564,28 +103631,28 @@ - + - + - + - + - + - + - + @@ -103594,23 +103661,23 @@ - + - + - + - + - + @@ -103619,7 +103686,7 @@ - + @@ -103637,9 +103704,9 @@ - + - + @@ -103651,7 +103718,7 @@ - + @@ -103660,16 +103727,16 @@ - + - + - + - + @@ -103681,7 +103748,7 @@ - + @@ -103698,9 +103765,9 @@ - + - + @@ -103715,12 +103782,12 @@ - + - + - + @@ -103735,7 +103802,7 @@ - + @@ -103747,10 +103814,10 @@ - + - + @@ -103768,22 +103835,22 @@ - + - + - + - + - + @@ -103813,24 +103880,24 @@ - + - + - + - + - + - + @@ -103839,15 +103906,15 @@ - + - + - + - + @@ -103855,7 +103922,7 @@ - + @@ -103891,21 +103958,21 @@ - + - + - + - + - + @@ -103935,7 +104002,7 @@ - + @@ -103958,9 +104025,9 @@ - + - + @@ -103984,10 +104051,10 @@ - + - + @@ -103998,7 +104065,7 @@ - + @@ -104006,7 +104073,7 @@ - + @@ -104017,7 +104084,7 @@ - + @@ -104025,45 +104092,45 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -104072,7 +104139,7 @@ - + @@ -104084,18 +104151,18 @@ - + - + - + - + @@ -104103,7 +104170,7 @@ - + @@ -104111,7 +104178,7 @@ - + @@ -104119,12 +104186,12 @@ - + - + - + @@ -104145,7 +104212,7 @@ - + @@ -104169,16 +104236,16 @@ - + - + - + @@ -104193,7 +104260,7 @@ - + @@ -104201,7 +104268,7 @@ - + @@ -104209,7 +104276,7 @@ - + @@ -104223,15 +104290,15 @@ - + - + - + - + @@ -104243,12 +104310,12 @@ - + - + @@ -104280,7 +104347,7 @@ - + @@ -104297,35 +104364,35 @@ - + - + - + - + - + - + - + - + - + @@ -104355,16 +104422,16 @@ - + - + - + @@ -104376,484 +104443,484 @@ - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - + - - + + - + - + - + - + + + + + + + + + + - + + - - + + - - + + - - + + - - + + + - - + + + - - + + - - + + - - + + - - - + + + - - - + + + + - - - + + + - - - + + + - - - + + + - - + + - - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + + - - - + + + - - - - + + + + - - + + + - - + + - + - - - + + + - - + + - + - - + + - + - - + + - + + + + - - + + - + + - - - - - - - - - - - - - - - - - - - - + + @@ -104864,374 +104931,374 @@ - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + - - + + + - - + - - - - - - - - - - - - - - - - - - - + + - + - - - + + + + + + + + + + + + + + + + - - - - - + + + - - + + + - - - + + - - - + + + - - - - - - - - - - - - - - + + + - - - - + + + + - - - - + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - + - - - + + + - - - + + + - + - + + + + + + + + + + - - - - - - - - - - - + + - - - + + + - - + + + + + + + + + + + + + - - - - - - - - - - - - - + + - - - + + + - - + + - - - + + + - + @@ -105239,16 +105306,16 @@ - + - + - + @@ -105258,7 +105325,7 @@ - + @@ -105266,7 +105333,15 @@ - + + + + + + + + + @@ -105413,7 +105488,7 @@ - + @@ -105701,13 +105776,13 @@ - + - + @@ -105724,12 +105799,12 @@ - + - - - - + + + + @@ -105742,9 +105817,9 @@ - - - + + + @@ -105753,42 +105828,42 @@ - + - + - + - + - + - + - + - + - + - + @@ -105797,21 +105872,21 @@ - - + + - + - + @@ -105819,75 +105894,75 @@ - - + + - + - + - - + + - + - - - + + + - - - + + + - + - + - - + + - + - - + + - + - + - + - + @@ -105899,237 +105974,237 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -106140,29 +106215,29 @@ - + - + - + - + - + - + - + @@ -106176,7 +106251,7 @@ - + @@ -106190,10 +106265,10 @@ - + - + @@ -106204,10 +106279,10 @@ - + - + @@ -106215,19 +106290,19 @@ - + - + - + - + - + @@ -106235,51 +106310,51 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -106287,7 +106362,7 @@ - + @@ -106295,7 +106370,7 @@ - + @@ -106303,13 +106378,13 @@ - + - + - + @@ -106317,7 +106392,7 @@ - + @@ -106325,10 +106400,10 @@ - + - + @@ -106342,10 +106417,10 @@ - + - + @@ -106353,7 +106428,7 @@ - + @@ -106364,31 +106439,31 @@ - + - + - + - + - + - - - + + + - - + + - + @@ -106397,22 +106472,22 @@ - + - - + + - - - + + + - - - + + + @@ -106420,24 +106495,24 @@ - + - - - + + + - + - - + + - + @@ -106452,7 +106527,7 @@ - + @@ -106460,7 +106535,7 @@ - + @@ -106475,13 +106550,13 @@ - + - + - + @@ -106504,19 +106579,19 @@ - + - + - + - + @@ -106534,25 +106609,25 @@ - + - - + + - - + + - - + + - + @@ -106562,7 +106637,7 @@ - + @@ -106570,20 +106645,12 @@ - + - - - - - - - - - - - + + + @@ -106591,11 +106658,11 @@ - + - + @@ -106603,56 +106670,56 @@ - + - + - + - + - + - + - + - - + + - + - - + + - - + + - + - + - + @@ -106662,13 +106729,13 @@ - + - + - + @@ -106701,22 +106768,22 @@ - + - + - + - + - + - + @@ -106737,10 +106804,10 @@ - + - + @@ -106749,7 +106816,7 @@ - + @@ -106757,9 +106824,9 @@ - + - + @@ -106768,12 +106835,12 @@ - + - + - + @@ -106803,21 +106870,29 @@ - + + + + + + + + + - + - + - + @@ -106841,51 +106916,51 @@ - - - - + + + + - + - + - - - - + + + + - + - + - + - + - + - + @@ -106894,17 +106969,17 @@ - - + + - - + + - - + + @@ -106919,64 +106994,64 @@ - + - + - + - - + + - + - - + + - - + + - - + + - + - - + + - + - + - + - + - + @@ -106985,20 +107060,20 @@ - + - - - + + + - + - + @@ -107010,31 +107085,31 @@ - + - + - + - - + + - + - + - + - + - + @@ -107045,7 +107120,7 @@ - + @@ -107056,7 +107131,7 @@ - + @@ -107064,7 +107139,7 @@ - + @@ -107073,119 +107148,119 @@ - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + @@ -107209,9 +107284,9 @@ - + - + @@ -107232,124 +107307,124 @@ - + - + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + - - - + + + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + + + + + + - - - - - - - + + - + - + - + @@ -107367,12 +107442,12 @@ - + - + @@ -107384,10 +107459,10 @@ - + - + @@ -107402,10 +107477,10 @@ - + - + @@ -107426,7 +107501,7 @@ - + @@ -107435,7 +107510,7 @@ - + @@ -107452,41 +107527,41 @@ - + - + - + - + - + - + - + - - - - - - + + + + + + - + - + @@ -107498,87 +107573,87 @@ - + + + + + - + + + - - - + + + - - - - - - - + - - + + - + - + - + - - + + - + - - + + - + - - + + - + - + - + @@ -107587,19 +107662,19 @@ - + - + - + - + @@ -107616,36 +107691,36 @@ - - - + + + - + - + - - + + - + - - + + - + @@ -107659,45 +107734,45 @@ - - + + - - - + + + - + - - + + - + - + - - + + - - + + @@ -107708,26 +107783,26 @@ - + - + - + - + - + - + @@ -107739,78 +107814,79 @@ - - - + + + + + - - - + - + - - + + - + - + - + - + - + - + - + + - + - + - + - + - + - + @@ -107819,34 +107895,40 @@ - - - + + + - + - + + + + + + + - + - + - + @@ -107854,13 +107936,13 @@ - + - + @@ -107874,10 +107956,10 @@ - + - + @@ -107886,10 +107968,10 @@ - + - + @@ -107901,15 +107983,15 @@ - + - + - + - + @@ -107929,102 +108011,102 @@ - + - + - + - + - + - + - + - + - + - - - + + + + - - - - - - - + + + + + + + - - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + @@ -108032,8 +108114,8 @@ - - + + @@ -108041,133 +108123,133 @@ + + + + - + + - - - - - - + - + - + - + - - + + - + - - + + - + - - + + - - - + + + - + - - + + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + @@ -108176,35 +108258,35 @@ - + - + - + - + - + - + - + - + @@ -108215,10 +108297,10 @@ - + - + @@ -108236,7 +108318,7 @@ - + @@ -108257,13 +108339,13 @@ - + - + - + @@ -108274,16 +108356,16 @@ - + - + - + @@ -108298,7 +108380,7 @@ - + @@ -108310,43 +108392,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -108361,13 +108443,13 @@ - + - + @@ -108376,31 +108458,31 @@ - + - + - + - + - + @@ -108430,13 +108512,13 @@ - + - + - + @@ -108448,12 +108530,12 @@ - + - + @@ -108461,19 +108543,19 @@ - + - + - + @@ -108482,7 +108564,7 @@ - + @@ -108491,19 +108573,19 @@ - + - + - + - + - + @@ -108560,21 +108642,21 @@ - + - + - + - + @@ -108603,48 +108685,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -108671,7 +108753,7 @@ - + @@ -108682,28 +108764,28 @@ - + - + - + - + - + - + @@ -108716,21 +108798,21 @@ - + - + - + - + @@ -108742,65 +108824,65 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -108812,15 +108894,15 @@ - + - + - + - + @@ -108847,23 +108929,23 @@ - + - + - + - + - + @@ -108871,7 +108953,7 @@ - + @@ -108906,35 +108988,35 @@ - + - + - + - + - + - + - + - + - + @@ -108951,7 +109033,7 @@ - + @@ -108962,7 +109044,7 @@ - + @@ -108970,23 +109052,23 @@ - + - + - + - + - + @@ -109003,7 +109085,7 @@ - + @@ -109023,13 +109105,13 @@ - + - + - + @@ -109037,21 +109119,21 @@ - + - + - + - + @@ -109072,10 +109154,10 @@ - + - + @@ -109083,10 +109165,10 @@ - + - + @@ -109101,10 +109183,10 @@ - + - + @@ -109122,7 +109204,7 @@ - + @@ -109134,7 +109216,7 @@ - + @@ -109145,37 +109227,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -109196,9 +109278,9 @@ - + - + @@ -109207,16 +109289,16 @@ - + - + - + @@ -109229,66 +109311,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -109296,19 +109378,19 @@ - + - + - + - + @@ -109319,7 +109401,7 @@ - + @@ -109327,18 +109409,18 @@ - + - + - + - + - + @@ -109349,7 +109431,7 @@ - + @@ -109360,15 +109442,15 @@ - + - + - + - + @@ -109380,16 +109462,16 @@ - + - + - + @@ -109440,28 +109522,28 @@ - + - + - + - + - + - + @@ -109482,7 +109564,7 @@ - + @@ -109524,7 +109606,7 @@ - + @@ -109532,10 +109614,10 @@ - + - + @@ -109556,35 +109638,35 @@ - + - + - + - + - + - + - + - + @@ -109595,21 +109677,21 @@ - + - + - + - + - + - + @@ -109617,7 +109699,7 @@ - + @@ -109625,23 +109707,23 @@ - + - + - + - + - + @@ -109659,13 +109741,13 @@ - + - + @@ -109674,18 +109756,18 @@ - + - + - + - + @@ -109700,16 +109782,16 @@ - - + + - + - + @@ -109748,7 +109830,7 @@ - + @@ -109756,19 +109838,19 @@ - + - + - + - + @@ -109783,10 +109865,10 @@ - + - + @@ -109815,7 +109897,7 @@ - + @@ -109842,16 +109924,16 @@ - + - + - + @@ -109880,7 +109962,7 @@ - + @@ -109903,209 +109985,209 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -110116,9 +110198,9 @@ - + - + @@ -110142,81 +110224,81 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -110249,7 +110331,7 @@ - + @@ -110258,15 +110340,15 @@ - + - + - + @@ -110275,228 +110357,228 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - + + - - + + - + - + - + - + - + - - + + - + - + - + - - - + + + - + - + - + - + @@ -110504,434 +110586,434 @@ - - - + + + - + - + - - + + - - + + - + - - + + - - + + - - + + + + + + + + - - - + + - - + + + - + - - + - + - - + + + - + - - + + - - + + - + - - - + + - - + + - + + - - - - - - - + - - + + - - + + - - + + - + + + + + + + - - - + + - - + - + + - - + + + - - - + + - - + + - + - + + + + - + - + - + - - - + + - + - - + + + - + - - - + + - + - - + - + - + + - + - - + - + - - - - - - - + - - - + + + - - - + + + + + + + + - - + + + - - - + - + + - + + - + + + - - + - + - - + - - - + + + + + - - - + + + - + - - + + - - - - - - - - - + + + + + - + + + - - - + + - - + - - - - - + + + + + + - - + + - - - - - - - - - + + + + - - + + + + + + - + + - - + + - - + - - - - - - + + - + - + @@ -110939,7 +111021,7 @@ - + @@ -110947,7 +111029,7 @@ - + @@ -110956,8 +111038,8 @@ - - + + @@ -110974,7 +111056,7 @@ - + @@ -110983,179 +111065,187 @@ - + + - - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - - - - + + + + - - + + - - + + - - - + + + - - - - + + + + - - - + + + - + - + + + + + + + + + @@ -111178,7 +111268,7 @@ - + @@ -111196,7 +111286,7 @@ - + @@ -111211,28 +111301,28 @@ - + - + - + - + - + @@ -111240,52 +111330,52 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + @@ -111293,59 +111383,51 @@ - - - - - - - - - - + + - - - + + + - - + + - + - - + + - - + + - + - + - + - + - + - + @@ -111357,13 +111439,13 @@ - + - + - + @@ -111414,10 +111496,10 @@ - + - + @@ -111441,7 +111523,7 @@ - + @@ -111453,21 +111535,21 @@ - + - + - + - + - + @@ -111476,24 +111558,24 @@ - + - + - + - + - + @@ -111562,13 +111644,13 @@ - + - + - + @@ -111577,10 +111659,10 @@ - + - + @@ -111645,7 +111727,7 @@ - + @@ -111657,7 +111739,7 @@ - + @@ -111668,9 +111750,9 @@ - + - + @@ -111685,25 +111767,25 @@ - + - + - + - + - + - + - + @@ -111799,18 +111881,18 @@ - + - + - + - + @@ -111819,21 +111901,21 @@ - + - + - + - + @@ -111844,74 +111926,74 @@ - + - + - + - + - + - + - + - - - - - - + + + + + - - - - + + + + + - - - + + + - - + + - - - + + + - + - + - + - + - + - + - + @@ -111921,6 +112003,6 @@ diff --git a/abi_gki_aarch64_unisoc_whitelist b/abi_gki_aarch64_unisoc_whitelist index 1ec428eac6c0..aa8483250f7d 100644 --- a/abi_gki_aarch64_unisoc_whitelist +++ b/abi_gki_aarch64_unisoc_whitelist @@ -98,6 +98,7 @@ devm_free_irq devm_gpiochip_add_data devm_gpiod_get + devm_gpio_free devm_gpio_request devm_hwspin_lock_request_specific __devm_iio_device_register @@ -189,6 +190,7 @@ gpiod_direction_output_raw gpiod_get_raw_value gpiod_set_raw_value + gpiod_set_raw_value_cansleep gpiod_to_chip gpiod_to_irq gpio_free @@ -199,6 +201,7 @@ handle_level_irq i2c_del_driver i2c_register_driver + i2c_transfer_buffer_flags i2c_smbus_read_byte_data i2c_smbus_write_byte_data ida_alloc_range @@ -220,6 +223,33 @@ input_register_device __ioremap iounmap + iommu_alloc_resv_region + iommu_attach_device + iommu_detach_device + iommu_device_register + iommu_device_unregister + iommu_dma_get_resv_regions + iommu_domain_alloc + iommu_domain_free + iommu_domain_get_attr + iommu_domain_set_attr + iommu_fwspec_add_ids + iommu_fwspec_free + iommu_get_dma_cookie + iommu_get_domain_for_dev + iommu_group_get + iommu_group_get_for_dev + iommu_group_get_iommudata + iommu_group_put + iommu_group_ref_get + iommu_group_remove_device + iommu_group_set_iommudata + iommu_map + iommu_map_sg + iommu_present + iommu_put_dma_cookie + iommu_set_fault_handler + iommu_unmap ip_route_output_flow irq_find_mapping irq_get_irq_data @@ -263,6 +293,8 @@ ktime_get_real_seconds ktime_get_real_ts64 kzfree + __list_add_valid + __list_del_entry_valid memcpy memset misc_deregister @@ -435,6 +467,7 @@ seq_putc seq_puts seq_read + set_normalized_timespec64 set_user_nice sg_init_table sg_miter_next @@ -460,6 +493,7 @@ snd_pcm_hw_constraint_minmax snd_pcm_lib_ioctl snd_pcm_period_elapsed + snd_soc_add_component_controls snd_soc_dapm_disable_pin snd_soc_dapm_enable_pin snd_soc_dapm_ignore_suspend @@ -826,6 +860,9 @@ # required by microarray_fp.ko cdev_alloc +# required by mmc_hsq.ko + mmc_cqe_request_done + # required by musb_hdrc.ko device_wakeup_enable dev_printk @@ -947,6 +984,8 @@ memcmp mutex_is_locked of_devfreq_cooling_register_power + of_hwspin_lock_get_id_byname + of_modalias_node on_each_cpu prepare_to_wait put_unused_fd @@ -1134,6 +1173,7 @@ mmc_of_parse mmc_regulator_set_vqmmc mmc_remove_host + mmc_request_done __sdhci_add_host sdhci_cleanup_host sdhci_enable_clk @@ -1225,6 +1265,14 @@ # required by sipc_core.ko gen_pool_destroy + mbox_chan_received_data + mbox_chan_txdone + mbox_client_txdone + mbox_controller_register + mbox_controller_unregister + mbox_free_channel + mbox_request_channel + mbox_send_message register_syscore_ops # required by sipx.ko @@ -1233,6 +1281,15 @@ hrtimer_start_range_ns hrtimer_try_to_cancel +# required by snd-soc-aw881xx.ko + i2c_smbus_write_byte + +# required by snd-soc-akm4377.ko + regcache_mark_dirty + regcache_sync + snd_soc_get_volsw + snd_soc_put_volsw + # required by snd-soc-sprd-audio-dma.ko dmam_alloc_attrs dmam_free_coherent @@ -1302,6 +1359,16 @@ snd_ctl_boolean_mono_info snd_pcm_hw_constraint_list +# required by snd-soc-tfa98xx.ko + crc32_le + device_create_bin_file + device_remove_bin_file + msleep_interruptible + snd_pcm_format_width + snd_pcm_hw_constraint_mask64 + snd_soc_dapm_add_routes + snd_soc_dapm_new_controls + # required by sprd-cpufreq-common.ko dev_pm_opp_remove @@ -1328,6 +1395,7 @@ dma_get_sgtable_attrs dma_mmap_attrs dma_set_coherent_mask + drm_add_edid_modes drm_atomic_helper_async_commit drm_atomic_helper_check drm_atomic_helper_cleanup_planes @@ -1350,17 +1418,33 @@ __drm_atomic_helper_plane_destroy_state __drm_atomic_helper_plane_duplicate_state drm_atomic_helper_prepare_planes + drm_atomic_helper_resume drm_atomic_helper_set_config drm_atomic_helper_shutdown + drm_atomic_helper_suspend drm_atomic_helper_swap_state + drm_atomic_helper_update_legacy_modeset_state drm_atomic_helper_update_plane drm_atomic_helper_wait_for_dependencies + drm_atomic_helper_wait_for_fences + drm_atomic_helper_wait_for_vblanks + drm_atomic_private_obj_fini + drm_atomic_private_obj_init + drm_atomic_set_crtc_for_connector + drm_atomic_set_fence_for_plane + drm_atomic_set_mode_for_crtc + drm_atomic_state_alloc + drm_atomic_state_clear + drm_atomic_state_default_clear + drm_atomic_state_default_release __drm_atomic_state_free drm_bridge_attach + drm_connector_attach_content_protection_property drm_connector_attach_encoder drm_connector_cleanup drm_connector_init drm_connector_unregister + drm_connector_update_edid_property drm_crtc_cleanup __drm_crtc_commit_free drm_crtc_handle_vblank @@ -1370,9 +1454,21 @@ drm_crtc_vblank_on drm_display_mode_from_videomode drm_display_mode_to_videomode + drm_dp_aux_register + drm_dp_aux_unregister + drm_dp_calc_pbn_mode + drm_dp_channel_eq_ok + drm_dp_clock_recovery_ok + drm_dp_dpcd_read + drm_dp_dpcd_read_link_status + drm_dp_dpcd_write drm_encoder_cleanup drm_encoder_init drm_format_info + drm_gem_cma_prime_get_sg_table + drm_gem_cma_prime_mmap + drm_gem_cma_prime_vmap + drm_gem_cma_prime_vunmap drm_gem_cma_vm_ops drm_gem_create_mmap_offset drm_gem_fb_create @@ -1383,12 +1479,19 @@ drm_gem_object_init drm_gem_object_put_unlocked drm_gem_object_release + drm_gem_prime_export drm_gem_prime_fd_to_handle + drm_gem_prime_handle_to_fd drm_gem_prime_import drm_gem_vm_close + drm_get_edid + drm_hdcp_check_ksvs_revoked + drm_hdcp_update_content_protection + drm_helper_hpd_irq_event drm_helper_probe_single_connector_modes drm_kms_helper_poll_fini drm_kms_helper_poll_init + drm_match_cea_mode drm_mode_config_reset drm_mode_create drm_mode_crtc_set_gamma_size @@ -1628,7 +1731,22 @@ free_percpu_irq irq_create_of_mapping panic_notifier_list + register_virtio_device + register_virtio_driver __request_percpu_irq + unregister_virtio_device + unregister_virtio_driver + virtqueue_add_inbuf + virtqueue_add_outbuf + virtqueue_detach_unused_buf + virtqueue_get_buf + virtqueue_get_vring_size + virtqueue_kick + virtqueue_kick_prepare + virtqueue_notify + vring_del_virtqueue + vring_interrupt + vring_new_virtqueue wait_woken woken_wake_function @@ -1757,3 +1875,4 @@ of_usb_host_tpl_support pci_bus_type __usb_create_hcd + usb_hcd_platform_shutdown From 3fcd53b1d859799686a08785afb8990566c31cfa Mon Sep 17 00:00:00 2001 From: Heiner Kallweit Date: Wed, 8 Apr 2020 00:01:42 +0200 Subject: [PATCH 095/136] net: phy: realtek: fix handling of RTL8105e-integrated PHY [ No applicable upstream commit ] After the referenced fix it turned out that one particular RTL8168 chip version (RTL8105e) does not work on 5.4 because no dedicated PHY driver exists. Adding this PHY driver was done for fixing a different issue for versions from 5.5 already. I re-send the same change for 5.4 because the commit message differs. Fixes: 2e8c339b4946 ("r8169: fix PHY driver check on platforms w/o module softdeps") Signed-off-by: Heiner Kallweit Signed-off-by: Greg Kroah-Hartman --- drivers/net/phy/realtek.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c index c76df51dd3c5..879ca37c8508 100644 --- a/drivers/net/phy/realtek.c +++ b/drivers/net/phy/realtek.c @@ -456,6 +456,15 @@ static struct phy_driver realtek_drvs[] = { .resume = genphy_resume, .read_page = rtl821x_read_page, .write_page = rtl821x_write_page, + }, { + PHY_ID_MATCH_MODEL(0x001cc880), + .name = "RTL8208 Fast Ethernet", + .read_mmd = genphy_read_mmd_unsupported, + .write_mmd = genphy_write_mmd_unsupported, + .suspend = genphy_suspend, + .resume = genphy_resume, + .read_page = rtl821x_read_page, + .write_page = rtl821x_write_page, }, { PHY_ID_MATCH_EXACT(0x001cc910), .name = "RTL8211 Gigabit Ethernet", From 77cf807936923f6b241b268219febede5cdae7bc Mon Sep 17 00:00:00 2001 From: Herat Ramani Date: Wed, 1 Apr 2020 01:16:09 +0530 Subject: [PATCH 096/136] cxgb4: fix MPS index overwrite when setting MAC address [ Upstream commit 41aa8561ca3fc5748391f08cc5f3e561923da52c ] cxgb4_update_mac_filt() earlier requests firmware to add a new MAC address into MPS TCAM. The MPS TCAM index returned by firmware is stored in pi->xact_addr_filt. However, the saved MPS TCAM index gets overwritten again with the return value of cxgb4_update_mac_filt(), which is wrong. When trying to update to another MAC address later, the wrong MPS TCAM index is sent to firmware, which causes firmware to return error, because it's not the same MPS TCAM index that firmware had sent earlier to driver. So, fix by removing the wrong overwrite being done after call to cxgb4_update_mac_filt(). Fixes: 3f8cfd0d95e6 ("cxgb4/cxgb4vf: Program hash region for {t4/t4vf}_change_mac()") Signed-off-by: Herat Ramani Signed-off-by: Rahul Lakkireddy Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c index 38024877751c..069a51847885 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c @@ -3032,7 +3032,6 @@ static int cxgb_set_mac_addr(struct net_device *dev, void *p) return ret; memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); - pi->xact_addr_filt = ret; return 0; } From bbbdd7956bab09a80d9453e76c9234572c2f6432 Mon Sep 17 00:00:00 2001 From: Jarod Wilson Date: Mon, 30 Mar 2020 11:22:19 -0400 Subject: [PATCH 097/136] ipv6: don't auto-add link-local address to lag ports [ Upstream commit 744fdc8233f6aa9582ce08a51ca06e59796a3196 ] Bonding slave and team port devices should not have link-local addresses automatically added to them, as it can interfere with openvswitch being able to properly add tc ingress. Basic reproducer, courtesy of Marcelo: $ ip link add name bond0 type bond $ ip link set dev ens2f0np0 master bond0 $ ip link set dev ens2f1np2 master bond0 $ ip link set dev bond0 up $ ip a s 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens2f0np0: mtu 1500 qdisc mq master bond0 state UP group default qlen 1000 link/ether 00:0f:53:2f:ea:40 brd ff:ff:ff:ff:ff:ff 5: ens2f1np2: mtu 1500 qdisc mq master bond0 state DOWN group default qlen 1000 link/ether 00:0f:53:2f:ea:40 brd ff:ff:ff:ff:ff:ff 11: bond0: mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:0f:53:2f:ea:40 brd ff:ff:ff:ff:ff:ff inet6 fe80::20f:53ff:fe2f:ea40/64 scope link valid_lft forever preferred_lft forever (above trimmed to relevant entries, obviously) $ sysctl net.ipv6.conf.ens2f0np0.addr_gen_mode=0 net.ipv6.conf.ens2f0np0.addr_gen_mode = 0 $ sysctl net.ipv6.conf.ens2f1np2.addr_gen_mode=0 net.ipv6.conf.ens2f1np2.addr_gen_mode = 0 $ ip a l ens2f0np0 2: ens2f0np0: mtu 1500 qdisc mq master bond0 state UP group default qlen 1000 link/ether 00:0f:53:2f:ea:40 brd ff:ff:ff:ff:ff:ff inet6 fe80::20f:53ff:fe2f:ea40/64 scope link tentative valid_lft forever preferred_lft forever $ ip a l ens2f1np2 5: ens2f1np2: mtu 1500 qdisc mq master bond0 state DOWN group default qlen 1000 link/ether 00:0f:53:2f:ea:40 brd ff:ff:ff:ff:ff:ff inet6 fe80::20f:53ff:fe2f:ea40/64 scope link tentative valid_lft forever preferred_lft forever Looks like addrconf_sysctl_addr_gen_mode() bypasses the original "is this a slave interface?" check added by commit c2edacf80e15, and results in an address getting added, while w/the proposed patch added, no address gets added. This simply adds the same gating check to another code path, and thus should prevent the same devices from erroneously obtaining an ipv6 link-local address. Fixes: d35a00b8e33d ("net/ipv6: allow sysctl to change link-local address generation mode") Reported-by: Moshe Levi CC: Stephen Hemminger CC: Marcelo Ricardo Leitner CC: netdev@vger.kernel.org Signed-off-by: Jarod Wilson Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/ipv6/addrconf.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index d02ccd749a60..6e1d200f30c1 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -3296,6 +3296,10 @@ static void addrconf_addr_gen(struct inet6_dev *idev, bool prefix_route) if (netif_is_l3_master(idev->dev)) return; + /* no link local addresses on devices flagged as slaves */ + if (idev->dev->flags & IFF_SLAVE) + return; + ipv6_addr_set(&addr, htonl(0xFE800000), 0, 0, 0); switch (idev->cnf.addr_gen_mode) { From 040f7a27583f4d543f1c29141c3a2f16b3b1afe6 Mon Sep 17 00:00:00 2001 From: Florian Fainelli Date: Sat, 4 Apr 2020 14:35:17 -0700 Subject: [PATCH 098/136] net: dsa: bcm_sf2: Do not register slave MDIO bus with OF [ Upstream commit 536fab5bf5826404534a6c271f622ad2930d9119 ] We were registering our slave MDIO bus with OF and doing so with assigning the newly created slave_mii_bus of_node to the master MDIO bus controller node. This is a bad thing to do for a number of reasons: - we are completely lying about the slave MII bus is arranged and yet we still want to control which MDIO devices it probes. It was attempted before to play tricks with the bus_mask to perform that: https://www.spinics.net/lists/netdev/msg429420.html but the approach was rightfully rejected - the device_node reference counting is messed up and we are effectively doing a double probe on the devices we already probed using the master, this messes up all resources reference counts (such as clocks) The proper fix for this as indicated by David in his reply to the thread above is to use a platform data style registration so as to control exactly which devices we probe: https://www.spinics.net/lists/netdev/msg430083.html By using mdiobus_register(), our slave_mii_bus->phy_mask value is used as intended, and all the PHY addresses that must be redirected towards our slave MDIO bus is happening while other addresses get redirected towards the master MDIO bus. Fixes: 461cd1b03e32 ("net: dsa: bcm_sf2: Register our slave MDIO bus") Signed-off-by: Florian Fainelli Reviewed-by: Vivien Didelot Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/dsa/bcm_sf2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c index 46dc913da852..4878400584c2 100644 --- a/drivers/net/dsa/bcm_sf2.c +++ b/drivers/net/dsa/bcm_sf2.c @@ -459,7 +459,7 @@ static int bcm_sf2_mdio_register(struct dsa_switch *ds) priv->slave_mii_bus->parent = ds->dev->parent; priv->slave_mii_bus->phy_mask = ~priv->indir_phy_mask; - err = of_mdiobus_register(priv->slave_mii_bus, dn); + err = mdiobus_register(priv->slave_mii_bus); if (err && dn) of_node_put(dn); From bce7ce18bd18d022cba978bb4265b2eca94761d4 Mon Sep 17 00:00:00 2001 From: Florian Fainelli Date: Sun, 5 Apr 2020 13:00:30 -0700 Subject: [PATCH 099/136] net: dsa: bcm_sf2: Ensure correct sub-node is parsed [ Upstream commit afa3b592953bfaecfb4f2f335ec5f935cff56804 ] When the bcm_sf2 was converted into a proper platform device driver and used the new dsa_register_switch() interface, we would still be parsing the legacy DSA node that contained all the port information since the platform firmware has intentionally maintained backward and forward compatibility to client programs. Ensure that we do parse the correct node, which is "ports" per the revised DSA binding. Fixes: d9338023fb8e ("net: dsa: bcm_sf2: Make it a real platform device driver") Signed-off-by: Florian Fainelli Reviewed-by: Vivien Didelot Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/dsa/bcm_sf2.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c index 4878400584c2..9502db66092e 100644 --- a/drivers/net/dsa/bcm_sf2.c +++ b/drivers/net/dsa/bcm_sf2.c @@ -1053,6 +1053,7 @@ static int bcm_sf2_sw_probe(struct platform_device *pdev) const struct bcm_sf2_of_data *data; struct b53_platform_data *pdata; struct dsa_switch_ops *ops; + struct device_node *ports; struct bcm_sf2_priv *priv; struct b53_device *dev; struct dsa_switch *ds; @@ -1115,7 +1116,11 @@ static int bcm_sf2_sw_probe(struct platform_device *pdev) set_bit(0, priv->cfp.used); set_bit(0, priv->cfp.unique); - bcm_sf2_identify_ports(priv, dn->child); + ports = of_find_node_by_name(dn, "ports"); + if (ports) { + bcm_sf2_identify_ports(priv, ports); + of_node_put(ports); + } priv->irq0 = irq_of_parse_and_map(dn, 0); priv->irq1 = irq_of_parse_and_map(dn, 1); From 7d3d99f579e81d6ee0b133e5a4ba1f3522553f65 Mon Sep 17 00:00:00 2001 From: Chuanhong Guo Date: Fri, 3 Apr 2020 19:28:24 +0800 Subject: [PATCH 100/136] net: dsa: mt7530: fix null pointer dereferencing in port5 setup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [ Upstream commit 0452800f6db4ed0a42ffb15867c0acfd68829f6a ] The 2nd gmac of mediatek soc ethernet may not be connected to a PHY and a phy-handle isn't always available. Unfortunately, mt7530 dsa driver assumes that the 2nd gmac is always connected to switch port 5 and setup mt7530 according to phy address of 2nd gmac node, causing null pointer dereferencing when phy-handle isn't defined in dts. This commit fix this setup code by checking return value of of_parse_phandle before using it. Fixes: 38f790a80560 ("net: dsa: mt7530: Add support for port 5") Signed-off-by: Chuanhong Guo Reviewed-by: Vivien Didelot Reviewed-by: Florian Fainelli Tested-by: René van Dorst Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/dsa/mt7530.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index e0e932f0aed1..8071c3fa3fb7 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -1353,6 +1353,9 @@ mt7530_setup(struct dsa_switch *ds) continue; phy_node = of_parse_phandle(mac_np, "phy-handle", 0); + if (!phy_node) + continue; + if (phy_node->parent == priv->dev->of_node->parent) { interface = of_get_phy_mode(mac_np); id = of_mdio_parse_addr(ds->dev, phy_node); From 1189ba9eedacb6ddc1171bd2602b338969d2b66c Mon Sep 17 00:00:00 2001 From: Oleksij Rempel Date: Fri, 3 Apr 2020 09:53:25 +0200 Subject: [PATCH 101/136] net: phy: micrel: kszphy_resume(): add delay after genphy_resume() before accessing PHY registers [ Upstream commit 6110dff776f7fa65c35850ef65b41d3b39e2fac2 ] After the power-down bit is cleared, the chip internally triggers a global reset. According to the KSZ9031 documentation, we have to wait at least 1ms for the reset to finish. If the chip is accessed during reset, read will return 0xffff, while write will be ignored. Depending on the system performance and MDIO bus speed, we may or may not run in to this issue. This bug was discovered on an iMX6QP system with KSZ9031 PHY and attached PHY interrupt line. If IRQ was used, the link status update was lost. In polling mode, the link status update was always correct. The investigation showed, that during a read-modify-write access, the read returned 0xffff (while the chip was still in reset) and corresponding write hit the chip _after_ reset and triggered (due to the 0xffff) another reset in an undocumented bit (register 0x1f, bit 1), resulting in the next write being lost due to the new reset cycle. This patch fixes the issue by adding a 1...2 ms sleep after the genphy_resume(). Fixes: 836384d2501d ("net: phy: micrel: Add specific suspend") Signed-off-by: Oleksij Rempel Reviewed-by: Andrew Lunn Reviewed-by: Florian Fainelli Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/phy/micrel.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c index 63dedec0433d..51b64f087717 100644 --- a/drivers/net/phy/micrel.c +++ b/drivers/net/phy/micrel.c @@ -25,6 +25,7 @@ #include #include #include +#include /* Operation Mode Strap Override */ #define MII_KSZPHY_OMSO 0x16 @@ -902,6 +903,12 @@ static int kszphy_resume(struct phy_device *phydev) genphy_resume(phydev); + /* After switching from power-down to normal mode, an internal global + * reset is automatically generated. Wait a minimum of 1 ms before + * read/write access to the PHY registers. + */ + usleep_range(1000, 2000); + ret = kszphy_config_reset(phydev); if (ret) return ret; From 1891d57f89aac8deca2ecabaeabc283c0a026534 Mon Sep 17 00:00:00 2001 From: Cong Wang Date: Sat, 28 Mar 2020 12:12:59 -0700 Subject: [PATCH 102/136] net_sched: add a temporary refcnt for struct tcindex_data [ Upstream commit 304e024216a802a7dc8ba75d36de82fa136bbf3e ] Although we intentionally use an ordered workqueue for all tc filter works, the ordering is not guaranteed by RCU work, given that tcf_queue_work() is esstenially a call_rcu(). This problem is demostrated by Thomas: CPU 0: tcf_queue_work() tcf_queue_work(&r->rwork, tcindex_destroy_rexts_work); -> Migration to CPU 1 CPU 1: tcf_queue_work(&p->rwork, tcindex_destroy_work); so the 2nd work could be queued before the 1st one, which leads to a free-after-free. Enforcing this order in RCU work is hard as it requires to change RCU code too. Fortunately we can workaround this problem in tcindex filter by taking a temporary refcnt, we only refcnt it right before we begin to destroy it. This simplifies the code a lot as a full refcnt requires much more changes in tcindex_set_parms(). Reported-by: syzbot+46f513c3033d592409d2@syzkaller.appspotmail.com Fixes: 3d210534cc93 ("net_sched: fix a race condition in tcindex_destroy()") Cc: Thomas Gleixner Cc: Paul E. McKenney Cc: Jamal Hadi Salim Cc: Jiri Pirko Signed-off-by: Cong Wang Reviewed-by: Paul E. McKenney Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/sched/cls_tcindex.c | 44 +++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/net/sched/cls_tcindex.c b/net/sched/cls_tcindex.c index 9904299424a1..065345832a69 100644 --- a/net/sched/cls_tcindex.c +++ b/net/sched/cls_tcindex.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -26,9 +27,12 @@ #define DEFAULT_HASH_SIZE 64 /* optimized for diffserv */ +struct tcindex_data; + struct tcindex_filter_result { struct tcf_exts exts; struct tcf_result res; + struct tcindex_data *p; struct rcu_work rwork; }; @@ -49,6 +53,7 @@ struct tcindex_data { u32 hash; /* hash table size; 0 if undefined */ u32 alloc_hash; /* allocated size */ u32 fall_through; /* 0: only classify if explicit match */ + refcount_t refcnt; /* a temporary refcnt for perfect hash */ struct rcu_work rwork; }; @@ -57,6 +62,20 @@ static inline int tcindex_filter_is_set(struct tcindex_filter_result *r) return tcf_exts_has_actions(&r->exts) || r->res.classid; } +static void tcindex_data_get(struct tcindex_data *p) +{ + refcount_inc(&p->refcnt); +} + +static void tcindex_data_put(struct tcindex_data *p) +{ + if (refcount_dec_and_test(&p->refcnt)) { + kfree(p->perfect); + kfree(p->h); + kfree(p); + } +} + static struct tcindex_filter_result *tcindex_lookup(struct tcindex_data *p, u16 key) { @@ -141,6 +160,7 @@ static void __tcindex_destroy_rexts(struct tcindex_filter_result *r) { tcf_exts_destroy(&r->exts); tcf_exts_put_net(&r->exts); + tcindex_data_put(r->p); } static void tcindex_destroy_rexts_work(struct work_struct *work) @@ -212,6 +232,8 @@ static int tcindex_delete(struct tcf_proto *tp, void *arg, bool *last, else __tcindex_destroy_fexts(f); } else { + tcindex_data_get(p); + if (tcf_exts_get_net(&r->exts)) tcf_queue_work(&r->rwork, tcindex_destroy_rexts_work); else @@ -228,9 +250,7 @@ static void tcindex_destroy_work(struct work_struct *work) struct tcindex_data, rwork); - kfree(p->perfect); - kfree(p->h); - kfree(p); + tcindex_data_put(p); } static inline int @@ -248,9 +268,11 @@ static const struct nla_policy tcindex_policy[TCA_TCINDEX_MAX + 1] = { }; static int tcindex_filter_result_init(struct tcindex_filter_result *r, + struct tcindex_data *p, struct net *net) { memset(r, 0, sizeof(*r)); + r->p = p; return tcf_exts_init(&r->exts, net, TCA_TCINDEX_ACT, TCA_TCINDEX_POLICE); } @@ -290,6 +312,7 @@ static int tcindex_alloc_perfect_hash(struct net *net, struct tcindex_data *cp) TCA_TCINDEX_ACT, TCA_TCINDEX_POLICE); if (err < 0) goto errout; + cp->perfect[i].p = cp; } return 0; @@ -334,6 +357,7 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base, cp->alloc_hash = p->alloc_hash; cp->fall_through = p->fall_through; cp->tp = tp; + refcount_set(&cp->refcnt, 1); /* Paired with tcindex_destroy_work() */ if (tb[TCA_TCINDEX_HASH]) cp->hash = nla_get_u32(tb[TCA_TCINDEX_HASH]); @@ -366,7 +390,7 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base, } cp->h = p->h; - err = tcindex_filter_result_init(&new_filter_result, net); + err = tcindex_filter_result_init(&new_filter_result, cp, net); if (err < 0) goto errout_alloc; if (old_r) @@ -434,7 +458,7 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base, goto errout_alloc; f->key = handle; f->next = NULL; - err = tcindex_filter_result_init(&f->result, net); + err = tcindex_filter_result_init(&f->result, cp, net); if (err < 0) { kfree(f); goto errout_alloc; @@ -447,7 +471,7 @@ tcindex_set_parms(struct net *net, struct tcf_proto *tp, unsigned long base, } if (old_r && old_r != r) { - err = tcindex_filter_result_init(old_r, net); + err = tcindex_filter_result_init(old_r, cp, net); if (err < 0) { kfree(f); goto errout_alloc; @@ -571,6 +595,14 @@ static void tcindex_destroy(struct tcf_proto *tp, bool rtnl_held, for (i = 0; i < p->hash; i++) { struct tcindex_filter_result *r = p->perfect + i; + /* tcf_queue_work() does not guarantee the ordering we + * want, so we have to take this refcnt temporarily to + * ensure 'p' is freed after all tcindex_filter_result + * here. Imperfect hash does not need this, because it + * uses linked lists rather than an array. + */ + tcindex_data_get(p); + tcf_unbind_filter(tp, &r->res); if (tcf_exts_get_net(&r->exts)) tcf_queue_work(&r->rwork, From 049b9fa3ef65095250243e3e196b2f1bb16cef89 Mon Sep 17 00:00:00 2001 From: Cong Wang Date: Thu, 2 Apr 2020 20:58:51 -0700 Subject: [PATCH 103/136] net_sched: fix a missing refcnt in tcindex_init() [ Upstream commit a8eab6d35e22f4f21471f16147be79529cd6aaf7 ] The initial refcnt of struct tcindex_data should be 1, it is clear that I forgot to set it to 1 in tcindex_init(). This leads to a dec-after-zero warning. Reported-by: syzbot+8325e509a1bf83ec741d@syzkaller.appspotmail.com Fixes: 304e024216a8 ("net_sched: add a temporary refcnt for struct tcindex_data") Cc: Jamal Hadi Salim Cc: Jiri Pirko Cc: Paul E. McKenney Signed-off-by: Cong Wang Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/sched/cls_tcindex.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/sched/cls_tcindex.c b/net/sched/cls_tcindex.c index 065345832a69..61e95029c18f 100644 --- a/net/sched/cls_tcindex.c +++ b/net/sched/cls_tcindex.c @@ -151,6 +151,7 @@ static int tcindex_init(struct tcf_proto *tp) p->mask = 0xffff; p->hash = DEFAULT_HASH_SIZE; p->fall_through = 1; + refcount_set(&p->refcnt, 1); /* Paired with tcindex_destroy_work() */ rcu_assign_pointer(tp->root, p); return 0; From feed32e3d6feb7a9e521a8e445b3beb953f776cf Mon Sep 17 00:00:00 2001 From: Jisheng Zhang Date: Fri, 3 Apr 2020 10:23:29 +0800 Subject: [PATCH 104/136] net: stmmac: dwmac1000: fix out-of-bounds mac address reg setting [ Upstream commit 3e1221acf6a8f8595b5ce354bab4327a69d54d18 ] Commit 9463c4455900 ("net: stmmac: dwmac1000: Clear unused address entries") cleared the unused mac address entries, but introduced an out-of bounds mac address register programming bug -- After setting the secondary unicast mac addresses, the "reg" value has reached netdev_uc_count() + 1, thus we should only clear address entries if (addr < perfect_addr_number) Fixes: 9463c4455900 ("net: stmmac: dwmac1000: Clear unused address entries") Signed-off-by: Jisheng Zhang Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c index 43a785f86c69..bc9b01376e80 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c @@ -209,7 +209,7 @@ static void dwmac1000_set_filter(struct mac_device_info *hw, reg++; } - while (reg <= perfect_addr_number) { + while (reg < perfect_addr_number) { writel(0, ioaddr + GMAC_ADDR_HIGH(reg)); writel(0, ioaddr + GMAC_ADDR_LOW(reg)); reg++; From fdb6a094ba41e985d9fb14ae2bfc180e3e983720 Mon Sep 17 00:00:00 2001 From: Richard Palethorpe Date: Wed, 1 Apr 2020 12:06:39 +0200 Subject: [PATCH 105/136] slcan: Don't transmit uninitialized stack data in padding [ Upstream commit b9258a2cece4ec1f020715fe3554bc2e360f6264 ] struct can_frame contains some padding which is not explicitly zeroed in slc_bump. This uninitialized data will then be transmitted if the stack initialization hardening feature is not enabled (CONFIG_INIT_STACK_ALL). This commit just zeroes the whole struct including the padding. Signed-off-by: Richard Palethorpe Fixes: a1044e36e457 ("can: add slcan driver for serial/USB-serial CAN adapters") Reviewed-by: Kees Cook Cc: linux-can@vger.kernel.org Cc: netdev@vger.kernel.org Cc: security@kernel.org Cc: wg@grandegger.com Cc: mkl@pengutronix.de Cc: davem@davemloft.net Acked-by: Marc Kleine-Budde Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/can/slcan.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c index a3664281a33f..4dfa459ef5c7 100644 --- a/drivers/net/can/slcan.c +++ b/drivers/net/can/slcan.c @@ -148,7 +148,7 @@ static void slc_bump(struct slcan *sl) u32 tmpid; char *cmd = sl->rbuff; - cf.can_id = 0; + memset(&cf, 0, sizeof(cf)); switch (*cmd) { case 'r': @@ -187,8 +187,6 @@ static void slc_bump(struct slcan *sl) else return; - *(u64 *) (&cf.data) = 0; /* clear payload */ - /* RTR frames may have a dlc > 0 but they never have any data bytes */ if (!(cf.can_id & CAN_RTR_FLAG)) { for (i = 0; i < cf.can_dlc; i++) { From 671331c11c39233e731bf5230a1c75b90ba55acf Mon Sep 17 00:00:00 2001 From: Will Deacon Date: Fri, 3 Apr 2020 16:13:21 +0100 Subject: [PATCH 106/136] tun: Don't put_page() for all negative return values from XDP program [ Upstream commit bee348907d19d654e8524d3a946dcd25b693aa7e ] When an XDP program is installed, tun_build_skb() grabs a reference to the current page fragment page if the program returns XDP_REDIRECT or XDP_TX. However, since tun_xdp_act() passes through negative return values from the XDP program, it is possible to trigger the error path by mistake and accidentally drop a reference to the fragments page without taking one, leading to a spurious free. This is believed to be the cause of some KASAN use-after-free reports from syzbot [1], although without a reproducer it is not possible to confirm whether this patch fixes the problem. Ensure that we only drop a reference to the fragments page if the XDP transmit or redirect operations actually fail. [1] https://syzkaller.appspot.com/bug?id=e76a6af1be4acd727ff6bbca669833f98cbf5d95 Cc: "David S. Miller" Cc: Alexei Starovoitov Cc: Daniel Borkmann CC: Eric Dumazet Acked-by: Jason Wang Fixes: 8ae1aff0b331 ("tuntap: split out XDP logic") Signed-off-by: Will Deacon Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/tun.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 69f553a028ee..16f5cb249ed5 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -1715,8 +1715,12 @@ static struct sk_buff *tun_build_skb(struct tun_struct *tun, alloc_frag->offset += buflen; } err = tun_xdp_act(tun, xdp_prog, &xdp, act); - if (err < 0) - goto err_xdp; + if (err < 0) { + if (act == XDP_REDIRECT || act == XDP_TX) + put_page(alloc_frag->page); + goto out; + } + if (err == XDP_REDIRECT) xdp_do_flush_map(); if (err != XDP_PASS) @@ -1730,8 +1734,6 @@ static struct sk_buff *tun_build_skb(struct tun_struct *tun, return __tun_build_skb(tfile, alloc_frag, buf, buflen, len, pad); -err_xdp: - put_page(alloc_frag->page); out: rcu_read_unlock(); local_bh_enable(); From 5249653d971d3f8ce4798dcadf1f38bd8572f0f9 Mon Sep 17 00:00:00 2001 From: Petr Machata Date: Sun, 5 Apr 2020 09:50:22 +0300 Subject: [PATCH 107/136] mlxsw: spectrum_flower: Do not stop at FLOW_ACTION_VLAN_MANGLE [ Upstream commit ccfc569347f870830e7c7cf854679a06cf9c45b5 ] The handler for FLOW_ACTION_VLAN_MANGLE ends by returning whatever the lower-level function that it calls returns. If there are more actions lined up after this action, those are never offloaded. Fix by only bailing out when the called function returns an error. Fixes: a150201a70da ("mlxsw: spectrum: Add support for vlan modify TC action") Signed-off-by: Petr Machata Reviewed-by: Jiri Pirko Signed-off-by: Ido Schimmel Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c index b607919c8ad0..498de6ef6870 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c @@ -123,9 +123,12 @@ static int mlxsw_sp_flower_parse_actions(struct mlxsw_sp *mlxsw_sp, u8 prio = act->vlan.prio; u16 vid = act->vlan.vid; - return mlxsw_sp_acl_rulei_act_vlan(mlxsw_sp, rulei, - act->id, vid, - proto, prio, extack); + err = mlxsw_sp_acl_rulei_act_vlan(mlxsw_sp, rulei, + act->id, vid, + proto, prio, extack); + if (err) + return err; + break; } default: NL_SET_ERR_MSG_MOD(extack, "Unsupported action"); From 74107d56d1e8e6ac5a061059941b7e2d03522df6 Mon Sep 17 00:00:00 2001 From: Heiner Kallweit Date: Sat, 4 Apr 2020 23:48:45 +0200 Subject: [PATCH 108/136] r8169: change back SG and TSO to be disabled by default [ Upstream commit 95099c569a9fdbe186a27447dfa8a5a0562d4b7f ] There has been a number of reports that using SG/TSO on different chip versions results in tx timeouts. However for a lot of people SG/TSO works fine. Therefore disable both features by default, but allow users to enable them. Use at own risk! Fixes: 93681cd7d94f ("r8169: enable HW csum and TSO") Signed-off-by: Heiner Kallweit Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/realtek/r8169_main.c | 34 +++++++++++------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c index 5ebfc3e66331..3bc6d1ef29ec 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -7167,12 +7167,10 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) netif_napi_add(dev, &tp->napi, rtl8169_poll, NAPI_POLL_WEIGHT); - dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO | - NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_TX | - NETIF_F_HW_VLAN_CTAG_RX; - dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO | - NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_TX | - NETIF_F_HW_VLAN_CTAG_RX; + dev->features |= NETIF_F_IP_CSUM | NETIF_F_RXCSUM | + NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX; + dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM | + NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX; dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO | NETIF_F_HIGHDMA; dev->priv_flags |= IFF_LIVE_ADDR_CHANGE; @@ -7190,25 +7188,25 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) dev->hw_features &= ~NETIF_F_HW_VLAN_CTAG_RX; if (rtl_chip_supports_csum_v2(tp)) { - dev->hw_features |= NETIF_F_IPV6_CSUM | NETIF_F_TSO6; - dev->features |= NETIF_F_IPV6_CSUM | NETIF_F_TSO6; + dev->hw_features |= NETIF_F_IPV6_CSUM; + dev->features |= NETIF_F_IPV6_CSUM; + } + + /* There has been a number of reports that using SG/TSO results in + * tx timeouts. However for a lot of people SG/TSO works fine. + * Therefore disable both features by default, but allow users to + * enable them. Use at own risk! + */ + if (rtl_chip_supports_csum_v2(tp)) { + dev->hw_features |= NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6; dev->gso_max_size = RTL_GSO_MAX_SIZE_V2; dev->gso_max_segs = RTL_GSO_MAX_SEGS_V2; } else { + dev->hw_features |= NETIF_F_SG | NETIF_F_TSO; dev->gso_max_size = RTL_GSO_MAX_SIZE_V1; dev->gso_max_segs = RTL_GSO_MAX_SEGS_V1; } - /* RTL8168e-vl and one RTL8168c variant are known to have a - * HW issue with TSO. - */ - if (tp->mac_version == RTL_GIGA_MAC_VER_34 || - tp->mac_version == RTL_GIGA_MAC_VER_22) { - dev->vlan_features &= ~(NETIF_F_ALL_TSO | NETIF_F_SG); - dev->hw_features &= ~(NETIF_F_ALL_TSO | NETIF_F_SG); - dev->features &= ~(NETIF_F_ALL_TSO | NETIF_F_SG); - } - dev->hw_features |= NETIF_F_RXALL; dev->hw_features |= NETIF_F_RXFCS; From 5e331978200e379c525394aa0863cece328c3dee Mon Sep 17 00:00:00 2001 From: Sven Schnelle Date: Wed, 22 Jan 2020 13:38:22 +0100 Subject: [PATCH 109/136] s390: prevent leaking kernel address in BEAR commit 0b38b5e1d0e2f361e418e05c179db05bb688bbd6 upstream. When userspace executes a syscall or gets interrupted, BEAR contains a kernel address when returning to userspace. This make it pretty easy to figure out where the kernel is mapped even with KASLR enabled. To fix this, add lpswe to lowcore and always execute it there, so userspace sees only the lowcore address of lpswe. For this we have to extend both critical_cleanup and the SWITCH_ASYNC macro to also check for lpswe addresses in lowcore. Fixes: b2d24b97b2a9 ("s390/kernel: add support for kernel address space layout randomization (KASLR)") Cc: # v5.2+ Reviewed-by: Gerald Schaefer Signed-off-by: Sven Schnelle Signed-off-by: Vasily Gorbik Signed-off-by: Greg Kroah-Hartman --- arch/s390/include/asm/lowcore.h | 4 +- arch/s390/include/asm/processor.h | 1 + arch/s390/include/asm/setup.h | 7 ++++ arch/s390/kernel/asm-offsets.c | 2 + arch/s390/kernel/entry.S | 65 ++++++++++++++++++------------- arch/s390/kernel/process.c | 1 + arch/s390/kernel/setup.c | 3 ++ arch/s390/kernel/smp.c | 2 + arch/s390/mm/vmem.c | 4 ++ 9 files changed, 62 insertions(+), 27 deletions(-) diff --git a/arch/s390/include/asm/lowcore.h b/arch/s390/include/asm/lowcore.h index 237ee0c4169f..612ed3c6d581 100644 --- a/arch/s390/include/asm/lowcore.h +++ b/arch/s390/include/asm/lowcore.h @@ -141,7 +141,9 @@ struct lowcore { /* br %r1 trampoline */ __u16 br_r1_trampoline; /* 0x0400 */ - __u8 pad_0x0402[0x0e00-0x0402]; /* 0x0402 */ + __u32 return_lpswe; /* 0x0402 */ + __u32 return_mcck_lpswe; /* 0x0406 */ + __u8 pad_0x040a[0x0e00-0x040a]; /* 0x040a */ /* * 0xe00 contains the address of the IPL Parameter Information diff --git a/arch/s390/include/asm/processor.h b/arch/s390/include/asm/processor.h index 51a0e4a2dc96..560d8b77b1d1 100644 --- a/arch/s390/include/asm/processor.h +++ b/arch/s390/include/asm/processor.h @@ -162,6 +162,7 @@ typedef struct thread_struct thread_struct; #define INIT_THREAD { \ .ksp = sizeof(init_stack) + (unsigned long) &init_stack, \ .fpu.regs = (void *) init_task.thread.fpu.fprs, \ + .last_break = 1, \ } /* diff --git a/arch/s390/include/asm/setup.h b/arch/s390/include/asm/setup.h index 6dc6c4fbc8e2..1932088686a6 100644 --- a/arch/s390/include/asm/setup.h +++ b/arch/s390/include/asm/setup.h @@ -8,6 +8,7 @@ #include #include +#include #define EP_OFFSET 0x10008 #define EP_STRING "S390EP" @@ -157,6 +158,12 @@ static inline unsigned long kaslr_offset(void) return __kaslr_offset; } +static inline u32 gen_lpswe(unsigned long addr) +{ + BUILD_BUG_ON(addr > 0xfff); + return 0xb2b20000 | addr; +} + #else /* __ASSEMBLY__ */ #define IPL_DEVICE (IPL_DEVICE_OFFSET) diff --git a/arch/s390/kernel/asm-offsets.c b/arch/s390/kernel/asm-offsets.c index 41ac4ad21311..b6628586ab70 100644 --- a/arch/s390/kernel/asm-offsets.c +++ b/arch/s390/kernel/asm-offsets.c @@ -125,6 +125,8 @@ int main(void) OFFSET(__LC_EXT_DAMAGE_CODE, lowcore, external_damage_code); OFFSET(__LC_MCCK_FAIL_STOR_ADDR, lowcore, failing_storage_address); OFFSET(__LC_LAST_BREAK, lowcore, breaking_event_addr); + OFFSET(__LC_RETURN_LPSWE, lowcore, return_lpswe); + OFFSET(__LC_RETURN_MCCK_LPSWE, lowcore, return_mcck_lpswe); OFFSET(__LC_RST_OLD_PSW, lowcore, restart_old_psw); OFFSET(__LC_EXT_OLD_PSW, lowcore, external_old_psw); OFFSET(__LC_SVC_OLD_PSW, lowcore, svc_old_psw); diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S index 270d1d145761..bc85987727f0 100644 --- a/arch/s390/kernel/entry.S +++ b/arch/s390/kernel/entry.S @@ -115,26 +115,29 @@ _LPP_OFFSET = __LC_LPP .macro SWITCH_ASYNC savearea,timer tmhh %r8,0x0001 # interrupting from user ? - jnz 1f + jnz 2f lgr %r14,%r9 + cghi %r14,__LC_RETURN_LPSWE + je 0f slg %r14,BASED(.Lcritical_start) clg %r14,BASED(.Lcritical_length) - jhe 0f + jhe 1f +0: lghi %r11,\savearea # inside critical section, do cleanup brasl %r14,cleanup_critical tmhh %r8,0x0001 # retest problem state after cleanup - jnz 1f -0: lg %r14,__LC_ASYNC_STACK # are we already on the target stack? + jnz 2f +1: lg %r14,__LC_ASYNC_STACK # are we already on the target stack? slgr %r14,%r15 srag %r14,%r14,STACK_SHIFT - jnz 2f + jnz 3f CHECK_STACK \savearea aghi %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE) - j 3f -1: UPDATE_VTIME %r14,%r15,\timer + j 4f +2: UPDATE_VTIME %r14,%r15,\timer BPENTER __TI_flags(%r12),_TIF_ISOLATE_BP -2: lg %r15,__LC_ASYNC_STACK # load async stack -3: la %r11,STACK_FRAME_OVERHEAD(%r15) +3: lg %r15,__LC_ASYNC_STACK # load async stack +4: la %r11,STACK_FRAME_OVERHEAD(%r15) .endm .macro UPDATE_VTIME w1,w2,enter_timer @@ -401,7 +404,7 @@ ENTRY(system_call) stpt __LC_EXIT_TIMER mvc __VDSO_ECTG_BASE(16,%r14),__LC_EXIT_TIMER lmg %r11,%r15,__PT_R11(%r11) - lpswe __LC_RETURN_PSW + b __LC_RETURN_LPSWE(%r0) .Lsysc_done: # @@ -608,43 +611,50 @@ ENTRY(pgm_check_handler) BPOFF stmg %r8,%r15,__LC_SAVE_AREA_SYNC lg %r10,__LC_LAST_BREAK - lg %r12,__LC_CURRENT + srag %r11,%r10,12 + jnz 0f + /* if __LC_LAST_BREAK is < 4096, it contains one of + * the lpswe addresses in lowcore. Set it to 1 (initial state) + * to prevent leaking that address to userspace. + */ + lghi %r10,1 +0: lg %r12,__LC_CURRENT lghi %r11,0 larl %r13,cleanup_critical lmg %r8,%r9,__LC_PGM_OLD_PSW tmhh %r8,0x0001 # test problem state bit - jnz 2f # -> fault in user space + jnz 3f # -> fault in user space #if IS_ENABLED(CONFIG_KVM) # cleanup critical section for program checks in sie64a lgr %r14,%r9 slg %r14,BASED(.Lsie_critical_start) clg %r14,BASED(.Lsie_critical_length) - jhe 0f + jhe 1f lg %r14,__SF_SIE_CONTROL(%r15) # get control block pointer ni __SIE_PROG0C+3(%r14),0xfe # no longer in SIE lctlg %c1,%c1,__LC_USER_ASCE # load primary asce larl %r9,sie_exit # skip forward to sie_exit lghi %r11,_PIF_GUEST_FAULT #endif -0: tmhh %r8,0x4000 # PER bit set in old PSW ? - jnz 1f # -> enabled, can't be a double fault +1: tmhh %r8,0x4000 # PER bit set in old PSW ? + jnz 2f # -> enabled, can't be a double fault tm __LC_PGM_ILC+3,0x80 # check for per exception jnz .Lpgm_svcper # -> single stepped svc -1: CHECK_STACK __LC_SAVE_AREA_SYNC +2: CHECK_STACK __LC_SAVE_AREA_SYNC aghi %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE) - # CHECK_VMAP_STACK branches to stack_overflow or 4f - CHECK_VMAP_STACK __LC_SAVE_AREA_SYNC,4f -2: UPDATE_VTIME %r14,%r15,__LC_SYNC_ENTER_TIMER + # CHECK_VMAP_STACK branches to stack_overflow or 5f + CHECK_VMAP_STACK __LC_SAVE_AREA_SYNC,5f +3: UPDATE_VTIME %r14,%r15,__LC_SYNC_ENTER_TIMER BPENTER __TI_flags(%r12),_TIF_ISOLATE_BP lg %r15,__LC_KERNEL_STACK lgr %r14,%r12 aghi %r14,__TASK_thread # pointer to thread_struct lghi %r13,__LC_PGM_TDB tm __LC_PGM_ILC+2,0x02 # check for transaction abort - jz 3f + jz 4f mvc __THREAD_trap_tdb(256,%r14),0(%r13) -3: stg %r10,__THREAD_last_break(%r14) -4: lgr %r13,%r11 +4: stg %r10,__THREAD_last_break(%r14) +5: lgr %r13,%r11 la %r11,STACK_FRAME_OVERHEAD(%r15) stmg %r0,%r7,__PT_R0(%r11) # clear user controlled registers to prevent speculative use @@ -663,14 +673,14 @@ ENTRY(pgm_check_handler) stg %r13,__PT_FLAGS(%r11) stg %r10,__PT_ARGS(%r11) tm __LC_PGM_ILC+3,0x80 # check for per exception - jz 5f + jz 6f tmhh %r8,0x0001 # kernel per event ? jz .Lpgm_kprobe oi __PT_FLAGS+7(%r11),_PIF_PER_TRAP mvc __THREAD_per_address(8,%r14),__LC_PER_ADDRESS mvc __THREAD_per_cause(2,%r14),__LC_PER_CODE mvc __THREAD_per_paid(1,%r14),__LC_PER_ACCESS_ID -5: REENABLE_IRQS +6: REENABLE_IRQS xc __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15) larl %r1,pgm_check_table llgh %r10,__PT_INT_CODE+2(%r11) @@ -775,7 +785,7 @@ ENTRY(io_int_handler) mvc __VDSO_ECTG_BASE(16,%r14),__LC_EXIT_TIMER .Lio_exit_kernel: lmg %r11,%r15,__PT_R11(%r11) - lpswe __LC_RETURN_PSW + b __LC_RETURN_LPSWE(%r0) .Lio_done: # @@ -1214,7 +1224,7 @@ ENTRY(mcck_int_handler) stpt __LC_EXIT_TIMER mvc __VDSO_ECTG_BASE(16,%r14),__LC_EXIT_TIMER 0: lmg %r11,%r15,__PT_R11(%r11) - lpswe __LC_RETURN_MCCK_PSW + b __LC_RETURN_MCCK_LPSWE .Lmcck_panic: lg %r15,__LC_NODAT_STACK @@ -1271,6 +1281,8 @@ ENDPROC(stack_overflow) #endif ENTRY(cleanup_critical) + cghi %r9,__LC_RETURN_LPSWE + je .Lcleanup_lpswe #if IS_ENABLED(CONFIG_KVM) clg %r9,BASED(.Lcleanup_table_sie) # .Lsie_gmap jl 0f @@ -1424,6 +1436,7 @@ ENDPROC(cleanup_critical) mvc __LC_RETURN_PSW(16),__PT_PSW(%r9) mvc 0(64,%r11),__PT_R8(%r9) lmg %r0,%r7,__PT_R0(%r9) +.Lcleanup_lpswe: 1: lmg %r8,%r9,__LC_RETURN_PSW BR_EX %r14,%r11 .Lcleanup_sysc_restore_insn: diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c index b0afec673f77..4e6299e2ca94 100644 --- a/arch/s390/kernel/process.c +++ b/arch/s390/kernel/process.c @@ -105,6 +105,7 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long new_stackp, p->thread.system_timer = 0; p->thread.hardirq_timer = 0; p->thread.softirq_timer = 0; + p->thread.last_break = 1; frame->sf.back_chain = 0; /* new return point is ret_from_fork */ diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index b95e6fa34cc8..4366962f4930 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c @@ -73,6 +73,7 @@ #include #include #include +#include #include "entry.h" /* @@ -457,6 +458,8 @@ static void __init setup_lowcore_dat_off(void) lc->spinlock_index = 0; arch_spin_lock_setup(0); lc->br_r1_trampoline = 0x07f1; /* br %r1 */ + lc->return_lpswe = gen_lpswe(__LC_RETURN_PSW); + lc->return_mcck_lpswe = gen_lpswe(__LC_RETURN_MCCK_PSW); set_prefix((u32)(unsigned long) lc); lowcore_ptr[0] = lc; diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 06dddd7c4290..f468a10e5206 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c @@ -212,6 +212,8 @@ static int pcpu_alloc_lowcore(struct pcpu *pcpu, int cpu) lc->spinlock_lockval = arch_spin_lockval(cpu); lc->spinlock_index = 0; lc->br_r1_trampoline = 0x07f1; /* br %r1 */ + lc->return_lpswe = gen_lpswe(__LC_RETURN_PSW); + lc->return_mcck_lpswe = gen_lpswe(__LC_RETURN_MCCK_PSW); if (nmi_alloc_per_cpu(lc)) goto out_async; if (vdso_alloc_per_cpu(lc)) diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c index b403fa14847d..f810930aff42 100644 --- a/arch/s390/mm/vmem.c +++ b/arch/s390/mm/vmem.c @@ -415,6 +415,10 @@ void __init vmem_map_init(void) SET_MEMORY_RO | SET_MEMORY_X); __set_memory(__stext_dma, (__etext_dma - __stext_dma) >> PAGE_SHIFT, SET_MEMORY_RO | SET_MEMORY_X); + + /* we need lowcore executable for our LPSWE instructions */ + set_memory_x(0, 1); + pr_info("Write protected kernel read-only data: %luk\n", (unsigned long)(__end_rodata - _stext) >> 10); } From 170f88a47b9ffa1afcbca384719faef8490abd31 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Fri, 21 Feb 2020 21:10:37 +0100 Subject: [PATCH 110/136] random: always use batched entropy for get_random_u{32,64} commit 69efea712f5b0489e67d07565aad5c94e09a3e52 upstream. It turns out that RDRAND is pretty slow. Comparing these two constructions: for (i = 0; i < CHACHA_BLOCK_SIZE; i += sizeof(ret)) arch_get_random_long(&ret); and long buf[CHACHA_BLOCK_SIZE / sizeof(long)]; extract_crng((u8 *)buf); it amortizes out to 352 cycles per long for the top one and 107 cycles per long for the bottom one, on Coffee Lake Refresh, Intel Core i9-9880H. And importantly, the top one has the drawback of not benefiting from the real rng, whereas the bottom one has all the nice benefits of using our own chacha rng. As get_random_u{32,64} gets used in more places (perhaps beyond what it was originally intended for when it was introduced as get_random_{int,long} back in the md5 monstrosity era), it seems like it might be a good thing to strengthen its posture a tiny bit. Doing this should only be stronger and not any weaker because that pool is already initialized with a bunch of rdrand data (when available). This way, we get the benefits of the hardware rng as well as our own rng. Another benefit of this is that we no longer hit pitfalls of the recent stream of AMD bugs in RDRAND. One often used code pattern for various things is: do { val = get_random_u32(); } while (hash_table_contains_key(val)); That recent AMD bug rendered that pattern useless, whereas we're really very certain that chacha20 output will give pretty distributed numbers, no matter what. So, this simplification seems better both from a security perspective and from a performance perspective. Signed-off-by: Jason A. Donenfeld Reviewed-by: Greg Kroah-Hartman Link: https://lore.kernel.org/r/20200221201037.30231-1-Jason@zx2c4.com Signed-off-by: Theodore Ts'o Signed-off-by: Greg Kroah-Hartman --- drivers/char/random.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/drivers/char/random.c b/drivers/char/random.c index a385fc1da1cb..8ff28c14af7e 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -2358,11 +2358,11 @@ struct batched_entropy { /* * Get a random word for internal kernel use only. The quality of the random - * number is either as good as RDRAND or as good as /dev/urandom, with the - * goal of being quite fast and not depleting entropy. In order to ensure + * number is good as /dev/urandom, but there is no backtrack protection, with + * the goal of being quite fast and not depleting entropy. In order to ensure * that the randomness provided by this function is okay, the function - * wait_for_random_bytes() should be called and return 0 at least once - * at any point prior. + * wait_for_random_bytes() should be called and return 0 at least once at any + * point prior. */ static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_u64) = { .batch_lock = __SPIN_LOCK_UNLOCKED(batched_entropy_u64.lock), @@ -2375,15 +2375,6 @@ u64 get_random_u64(void) struct batched_entropy *batch; static void *previous; -#if BITS_PER_LONG == 64 - if (arch_get_random_long((unsigned long *)&ret)) - return ret; -#else - if (arch_get_random_long((unsigned long *)&ret) && - arch_get_random_long((unsigned long *)&ret + 1)) - return ret; -#endif - warn_unseeded_randomness(&previous); batch = raw_cpu_ptr(&batched_entropy_u64); @@ -2408,9 +2399,6 @@ u32 get_random_u32(void) struct batched_entropy *batch; static void *previous; - if (arch_get_random_int(&ret)) - return ret; - warn_unseeded_randomness(&previous); batch = raw_cpu_ptr(&batched_entropy_u32); From 94d2d84bcafa3f491c55583154fd543a9b62f836 Mon Sep 17 00:00:00 2001 From: Thinh Nguyen Date: Thu, 5 Mar 2020 13:24:01 -0800 Subject: [PATCH 111/136] usb: dwc3: gadget: Wrap around when skip TRBs commit 2dedea035ae82c5af0595637a6eda4655532b21e upstream. When skipping TRBs, we need to account for wrapping around the ring buffer and not modifying some invalid TRBs. Without this fix, dwc3 won't be able to check for available TRBs. Cc: stable Fixes: 7746a8dfb3f9 ("usb: dwc3: gadget: extract dwc3_gadget_ep_skip_trbs()") Signed-off-by: Thinh Nguyen Signed-off-by: Felipe Balbi Signed-off-by: Greg Kroah-Hartman --- drivers/usb/dwc3/gadget.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 6ac02ba5e4a1..09d6b11246c9 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1518,7 +1518,7 @@ static void dwc3_gadget_ep_skip_trbs(struct dwc3_ep *dep, struct dwc3_request *r for (i = 0; i < req->num_trbs; i++) { struct dwc3_trb *trb; - trb = req->trb + i; + trb = &dep->trb_pool[dep->trb_dequeue]; trb->ctrl &= ~DWC3_TRB_CTRL_HWO; dwc3_ep_inc_deq(dep); } From 8b0f08036659cf67b4d22cd0a5ad96db5dec2057 Mon Sep 17 00:00:00 2001 From: Yury Norov Date: Thu, 30 Jan 2020 22:16:40 -0800 Subject: [PATCH 112/136] uapi: rename ext2_swab() to swab() and share globally in swab.h commit d5767057c9a76a29f073dad66b7fa12a90e8c748 upstream. ext2_swab() is defined locally in lib/find_bit.c However it is not specific to ext2, neither to bitmaps. There are many potential users of it, so rename it to just swab() and move to include/uapi/linux/swab.h ABI guarantees that size of unsigned long corresponds to BITS_PER_LONG, therefore drop unneeded cast. Link: http://lkml.kernel.org/r/20200103202846.21616-1-yury.norov@gmail.com Signed-off-by: Yury Norov Cc: Allison Randal Cc: Joe Perches Cc: Thomas Gleixner Cc: William Breathitt Gray Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- include/linux/swab.h | 1 + include/uapi/linux/swab.h | 10 ++++++++++ lib/find_bit.c | 16 ++-------------- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/include/linux/swab.h b/include/linux/swab.h index e466fd159c85..bcff5149861a 100644 --- a/include/linux/swab.h +++ b/include/linux/swab.h @@ -7,6 +7,7 @@ # define swab16 __swab16 # define swab32 __swab32 # define swab64 __swab64 +# define swab __swab # define swahw32 __swahw32 # define swahb32 __swahb32 # define swab16p __swab16p diff --git a/include/uapi/linux/swab.h b/include/uapi/linux/swab.h index 23cd84868cc3..fa7f97da5b76 100644 --- a/include/uapi/linux/swab.h +++ b/include/uapi/linux/swab.h @@ -4,6 +4,7 @@ #include #include +#include #include /* @@ -132,6 +133,15 @@ static inline __attribute_const__ __u32 __fswahb32(__u32 val) __fswab64(x)) #endif +static __always_inline unsigned long __swab(const unsigned long y) +{ +#if BITS_PER_LONG == 64 + return __swab64(y); +#else /* BITS_PER_LONG == 32 */ + return __swab32(y); +#endif +} + /** * __swahw32 - return a word-swapped 32-bit value * @x: value to wordswap diff --git a/lib/find_bit.c b/lib/find_bit.c index 5c51eb45178a..4e68490fa703 100644 --- a/lib/find_bit.c +++ b/lib/find_bit.c @@ -149,18 +149,6 @@ EXPORT_SYMBOL(find_last_bit); #ifdef __BIG_ENDIAN -/* include/linux/byteorder does not support "unsigned long" type */ -static inline unsigned long ext2_swab(const unsigned long y) -{ -#if BITS_PER_LONG == 64 - return (unsigned long) __swab64((u64) y); -#elif BITS_PER_LONG == 32 - return (unsigned long) __swab32((u32) y); -#else -#error BITS_PER_LONG not defined -#endif -} - #if !defined(find_next_bit_le) || !defined(find_next_zero_bit_le) static inline unsigned long _find_next_bit_le(const unsigned long *addr1, const unsigned long *addr2, unsigned long nbits, @@ -177,7 +165,7 @@ static inline unsigned long _find_next_bit_le(const unsigned long *addr1, tmp ^= invert; /* Handle 1st word. */ - tmp &= ext2_swab(BITMAP_FIRST_WORD_MASK(start)); + tmp &= swab(BITMAP_FIRST_WORD_MASK(start)); start = round_down(start, BITS_PER_LONG); while (!tmp) { @@ -191,7 +179,7 @@ static inline unsigned long _find_next_bit_le(const unsigned long *addr1, tmp ^= invert; } - return min(start + __ffs(ext2_swab(tmp)), nbits); + return min(start + __ffs(swab(tmp)), nbits); } #endif From ea84a26ab63349e48537bace81573520a2152634 Mon Sep 17 00:00:00 2001 From: Kees Cook Date: Wed, 1 Apr 2020 21:04:23 -0700 Subject: [PATCH 113/136] slub: improve bit diffusion for freelist ptr obfuscation commit 1ad53d9fa3f6168ebcf48a50e08b170432da2257 upstream. Under CONFIG_SLAB_FREELIST_HARDENED=y, the obfuscation was relatively weak in that the ptr and ptr address were usually so close that the first XOR would result in an almost entirely 0-byte value[1], leaving most of the "secret" number ultimately being stored after the third XOR. A single blind memory content exposure of the freelist was generally sufficient to learn the secret. Add a swab() call to mix bits a little more. This is a cheap way (1 cycle) to make attacks need more than a single exposure to learn the secret (or to know _where_ the exposure is in memory). kmalloc-32 freelist walk, before: ptr ptr_addr stored value secret ffff90c22e019020@ffff90c22e019000 is 86528eb656b3b5bd (86528eb656b3b59d) ffff90c22e019040@ffff90c22e019020 is 86528eb656b3b5fd (86528eb656b3b59d) ffff90c22e019060@ffff90c22e019040 is 86528eb656b3b5bd (86528eb656b3b59d) ffff90c22e019080@ffff90c22e019060 is 86528eb656b3b57d (86528eb656b3b59d) ffff90c22e0190a0@ffff90c22e019080 is 86528eb656b3b5bd (86528eb656b3b59d) ... after: ptr ptr_addr stored value secret ffff9eed6e019020@ffff9eed6e019000 is 793d1135d52cda42 (86528eb656b3b59d) ffff9eed6e019040@ffff9eed6e019020 is 593d1135d52cda22 (86528eb656b3b59d) ffff9eed6e019060@ffff9eed6e019040 is 393d1135d52cda02 (86528eb656b3b59d) ffff9eed6e019080@ffff9eed6e019060 is 193d1135d52cdae2 (86528eb656b3b59d) ffff9eed6e0190a0@ffff9eed6e019080 is f93d1135d52cdac2 (86528eb656b3b59d) [1] https://blog.infosectcbr.com.au/2020/03/weaknesses-in-linux-kernel-heap.html Fixes: 2482ddec670f ("mm: add SLUB free list pointer obfuscation") Reported-by: Silvio Cesare Signed-off-by: Kees Cook Signed-off-by: Andrew Morton Cc: Christoph Lameter Cc: Pekka Enberg Cc: David Rientjes Cc: Joonsoo Kim Cc: Link: http://lkml.kernel.org/r/202003051623.AF4F8CB@keescook Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- mm/slub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/slub.c b/mm/slub.c index 59ed00be02cb..af44807d5b05 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -261,7 +261,7 @@ static inline void *freelist_ptr(const struct kmem_cache *s, void *ptr, * freepointer to be restored incorrectly. */ return (void *)((unsigned long)ptr ^ s->random ^ - (unsigned long)kasan_reset_tag((void *)ptr_addr)); + swab((unsigned long)kasan_reset_tag((void *)ptr_addr))); #else return ptr; #endif From dfa210cf9f949a2c8a0686a3095093419eea2e84 Mon Sep 17 00:00:00 2001 From: David Ahern Date: Wed, 1 Apr 2020 21:02:25 -0700 Subject: [PATCH 114/136] tools/accounting/getdelays.c: fix netlink attribute length commit 4054ab64e29bb05b3dfe758fff3c38a74ba753bb upstream. A recent change to the netlink code: 6e237d099fac ("netlink: Relax attr validation for fixed length types") logs a warning when programs send messages with invalid attributes (e.g., wrong length for a u32). Yafang reported this error message for tools/accounting/getdelays.c. send_cmd() is wrongly adding 1 to the attribute length. As noted in include/uapi/linux/netlink.h nla_len should be NLA_HDRLEN + payload length, so drop the +1. Fixes: 9e06d3f9f6b1 ("per task delay accounting taskstats interface: documentation fix") Reported-by: Yafang Shao Signed-off-by: David Ahern Signed-off-by: Andrew Morton Tested-by: Yafang Shao Cc: Johannes Berg Cc: Shailabh Nagar Cc: Link: http://lkml.kernel.org/r/20200327173111.63922-1-dsahern@kernel.org Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- tools/accounting/getdelays.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/accounting/getdelays.c b/tools/accounting/getdelays.c index 8cb504d30384..5ef1c15e88ad 100644 --- a/tools/accounting/getdelays.c +++ b/tools/accounting/getdelays.c @@ -136,7 +136,7 @@ static int send_cmd(int sd, __u16 nlmsg_type, __u32 nlmsg_pid, msg.g.version = 0x1; na = (struct nlattr *) GENLMSG_DATA(&msg); na->nla_type = nla_type; - na->nla_len = nla_len + 1 + NLA_HDRLEN; + na->nla_len = nla_len + NLA_HDRLEN; memcpy(NLA_DATA(na), nla_data, nla_len); msg.n.nlmsg_len += NLMSG_ALIGN(na->nla_len); From 41a0cfa05c053002f6a8e2d41c5dc3e21da754b6 Mon Sep 17 00:00:00 2001 From: Martin Kaiser Date: Thu, 5 Mar 2020 21:58:20 +0100 Subject: [PATCH 115/136] hwrng: imx-rngc - fix an error path commit 47a1f8e8b3637ff5f7806587883d7d94068d9ee8 upstream. Make sure that the rngc interrupt is masked if the rngc self test fails. Self test failure means that probe fails as well. Interrupts should be masked in this case, regardless of the error. Cc: stable@vger.kernel.org Fixes: 1d5449445bd0 ("hwrng: mx-rngc - add a driver for Freescale RNGC") Reviewed-by: PrasannaKumar Muralidharan Signed-off-by: Martin Kaiser Signed-off-by: Herbert Xu Signed-off-by: Greg Kroah-Hartman --- drivers/char/hw_random/imx-rngc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/char/hw_random/imx-rngc.c b/drivers/char/hw_random/imx-rngc.c index 30cf00f8e9a0..0576801944fd 100644 --- a/drivers/char/hw_random/imx-rngc.c +++ b/drivers/char/hw_random/imx-rngc.c @@ -105,8 +105,10 @@ static int imx_rngc_self_test(struct imx_rngc *rngc) return -ETIMEDOUT; } - if (rngc->err_reg != 0) + if (rngc->err_reg != 0) { + imx_rngc_irq_mask_clear(rngc); return -EIO; + } return 0; } From 9da847d65f3710270a955bc40619b247421cd729 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Fri, 3 Apr 2020 17:48:33 +0200 Subject: [PATCH 116/136] ACPI: PM: Add acpi_[un]register_wakeup_handler() commit ddfd9dcf270ce23ed1985b66fcfa163920e2e1b8 upstream. Since commit fdde0ff8590b ("ACPI: PM: s2idle: Prevent spurious SCIs from waking up the system") the SCI triggering without there being a wakeup cause recognized by the ACPI sleep code will no longer wakeup the system. This works as intended, but this is a problem for devices where the SCI is shared with another device which is also a wakeup source. In the past these, from the pov of the ACPI sleep code, spurious SCIs would still cause a wakeup so the wakeup from the device sharing the interrupt would actually wakeup the system. This now no longer works. This is a problem on e.g. Bay Trail-T and Cherry Trail devices where some peripherals (typically the XHCI controller) can signal a Power Management Event (PME) to the Power Management Controller (PMC) to wakeup the system, this uses the same interrupt as the SCI. These wakeups are handled through a special INT0002 ACPI device which checks for events in the GPE0a_STS for this and takes care of acking the PME so that the shared interrupt stops triggering. The change to the ACPI sleep code to ignore the spurious SCI, causes the system to no longer wakeup on these PME events. To make things worse this means that the INT0002 device driver interrupt handler will no longer run, causing the PME to not get cleared and resulting in the system hanging. Trying to wakeup the system after such a PME through e.g. the power button no longer works. Add an acpi_register_wakeup_handler() function which registers a handler to be called from acpi_s2idle_wake() and when the handler returns true, return true from acpi_s2idle_wake(). The INT0002 driver will use this mechanism to check the GPE0a_STS register from acpi_s2idle_wake() and to tell the system to wakeup if a PME is signaled in the register. Fixes: fdde0ff8590b ("ACPI: PM: s2idle: Prevent spurious SCIs from waking up the system") Cc: 5.4+ # 5.4+ Signed-off-by: Hans de Goede Signed-off-by: Rafael J. Wysocki Signed-off-by: Greg Kroah-Hartman --- drivers/acpi/sleep.c | 4 +++ drivers/acpi/sleep.h | 1 + drivers/acpi/wakeup.c | 81 +++++++++++++++++++++++++++++++++++++++++++ include/linux/acpi.h | 5 +++ 4 files changed, 91 insertions(+) diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c index ce59a3f32eac..abd39cc5ff88 100644 --- a/drivers/acpi/sleep.c +++ b/drivers/acpi/sleep.c @@ -1009,6 +1009,10 @@ static bool acpi_s2idle_wake(void) if (acpi_any_fixed_event_status_set()) return true; + /* Check wakeups from drivers sharing the SCI. */ + if (acpi_check_wakeup_handlers()) + return true; + /* * If there are no EC events to process and at least one of the * other enabled GPEs is active, the wakeup is regarded as a diff --git a/drivers/acpi/sleep.h b/drivers/acpi/sleep.h index 41675d24a9bc..3d90480ce1b1 100644 --- a/drivers/acpi/sleep.h +++ b/drivers/acpi/sleep.h @@ -2,6 +2,7 @@ extern void acpi_enable_wakeup_devices(u8 sleep_state); extern void acpi_disable_wakeup_devices(u8 sleep_state); +extern bool acpi_check_wakeup_handlers(void); extern struct list_head acpi_wakeup_device_list; extern struct mutex acpi_device_lock; diff --git a/drivers/acpi/wakeup.c b/drivers/acpi/wakeup.c index 9614126bf56e..90c40f992e13 100644 --- a/drivers/acpi/wakeup.c +++ b/drivers/acpi/wakeup.c @@ -12,6 +12,15 @@ #include "internal.h" #include "sleep.h" +struct acpi_wakeup_handler { + struct list_head list_node; + bool (*wakeup)(void *context); + void *context; +}; + +static LIST_HEAD(acpi_wakeup_handler_head); +static DEFINE_MUTEX(acpi_wakeup_handler_mutex); + /* * We didn't lock acpi_device_lock in the file, because it invokes oops in * suspend/resume and isn't really required as this is called in S-state. At @@ -96,3 +105,75 @@ int __init acpi_wakeup_device_init(void) mutex_unlock(&acpi_device_lock); return 0; } + +/** + * acpi_register_wakeup_handler - Register wakeup handler + * @wake_irq: The IRQ through which the device may receive wakeups + * @wakeup: Wakeup-handler to call when the SCI has triggered a wakeup + * @context: Context to pass to the handler when calling it + * + * Drivers which may share an IRQ with the SCI can use this to register + * a handler which returns true when the device they are managing wants + * to trigger a wakeup. + */ +int acpi_register_wakeup_handler(int wake_irq, bool (*wakeup)(void *context), + void *context) +{ + struct acpi_wakeup_handler *handler; + + /* + * If the device is not sharing its IRQ with the SCI, there is no + * need to register the handler. + */ + if (!acpi_sci_irq_valid() || wake_irq != acpi_sci_irq) + return 0; + + handler = kmalloc(sizeof(*handler), GFP_KERNEL); + if (!handler) + return -ENOMEM; + + handler->wakeup = wakeup; + handler->context = context; + + mutex_lock(&acpi_wakeup_handler_mutex); + list_add(&handler->list_node, &acpi_wakeup_handler_head); + mutex_unlock(&acpi_wakeup_handler_mutex); + + return 0; +} +EXPORT_SYMBOL_GPL(acpi_register_wakeup_handler); + +/** + * acpi_unregister_wakeup_handler - Unregister wakeup handler + * @wakeup: Wakeup-handler passed to acpi_register_wakeup_handler() + * @context: Context passed to acpi_register_wakeup_handler() + */ +void acpi_unregister_wakeup_handler(bool (*wakeup)(void *context), + void *context) +{ + struct acpi_wakeup_handler *handler; + + mutex_lock(&acpi_wakeup_handler_mutex); + list_for_each_entry(handler, &acpi_wakeup_handler_head, list_node) { + if (handler->wakeup == wakeup && handler->context == context) { + list_del(&handler->list_node); + kfree(handler); + break; + } + } + mutex_unlock(&acpi_wakeup_handler_mutex); +} +EXPORT_SYMBOL_GPL(acpi_unregister_wakeup_handler); + +bool acpi_check_wakeup_handlers(void) +{ + struct acpi_wakeup_handler *handler; + + /* No need to lock, nothing else is running when we're called. */ + list_for_each_entry(handler, &acpi_wakeup_handler_head, list_node) { + if (handler->wakeup(handler->context)) + return true; + } + + return false; +} diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 8b4e516bac00..ce29a014e591 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -473,6 +473,11 @@ void __init acpi_nvs_nosave_s3(void); void __init acpi_sleep_no_blacklist(void); #endif /* CONFIG_PM_SLEEP */ +int acpi_register_wakeup_handler( + int wake_irq, bool (*wakeup)(void *context), void *context); +void acpi_unregister_wakeup_handler( + bool (*wakeup)(void *context), void *context); + struct acpi_osc_context { char *uuid_str; /* UUID string */ int rev; From e30a21c6fea55892a3bee813e6e60e5f5547841e Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Fri, 3 Apr 2020 17:48:34 +0200 Subject: [PATCH 117/136] platform/x86: intel_int0002_vgpio: Use acpi_register_wakeup_handler() commit 767191db8220db29f78c031f4d27375173c336d5 upstream. The Power Management Events (PMEs) the INT0002 driver listens for get signalled by the Power Management Controller (PMC) using the same IRQ as used for the ACPI SCI. Since commit fdde0ff8590b ("ACPI: PM: s2idle: Prevent spurious SCIs from waking up the system") the SCI triggering, without there being a wakeup cause recognized by the ACPI sleep code, will no longer wakeup the system. This breaks PMEs / wakeups signalled to the INT0002 driver, the system never leaves the s2idle_loop() now. Use acpi_register_wakeup_handler() to register a function which checks the GPE0a_STS register for a PME and trigger a wakeup when a PME has been signalled. Fixes: fdde0ff8590b ("ACPI: PM: s2idle: Prevent spurious SCIs from waking up the system") Cc: 5.4+ # 5.4+ Signed-off-by: Hans de Goede Acked-by: Andy Shevchenko Signed-off-by: Rafael J. Wysocki Signed-off-by: Greg Kroah-Hartman --- drivers/platform/x86/intel_int0002_vgpio.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/platform/x86/intel_int0002_vgpio.c b/drivers/platform/x86/intel_int0002_vgpio.c index af233b7b77f2..29d12f2f59e0 100644 --- a/drivers/platform/x86/intel_int0002_vgpio.c +++ b/drivers/platform/x86/intel_int0002_vgpio.c @@ -127,6 +127,14 @@ static irqreturn_t int0002_irq(int irq, void *data) return IRQ_HANDLED; } +static bool int0002_check_wake(void *data) +{ + u32 gpe_sts_reg; + + gpe_sts_reg = inl(GPE0A_STS_PORT); + return (gpe_sts_reg & GPE0A_PME_B0_STS_BIT); +} + static struct irq_chip int0002_byt_irqchip = { .name = DRV_NAME, .irq_ack = int0002_irq_ack, @@ -220,6 +228,7 @@ static int int0002_probe(struct platform_device *pdev) gpiochip_set_chained_irqchip(chip, irq_chip, irq, NULL); + acpi_register_wakeup_handler(irq, int0002_check_wake, NULL); device_init_wakeup(dev, true); return 0; } @@ -227,6 +236,7 @@ static int int0002_probe(struct platform_device *pdev) static int int0002_remove(struct platform_device *pdev) { device_init_wakeup(&pdev->dev, false); + acpi_unregister_wakeup_handler(int0002_check_wake, NULL); return 0; } From 9351dee1cc242dceb5feab3fc7d32e7900065e1c Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Fri, 6 Mar 2020 23:29:27 +0100 Subject: [PATCH 118/136] ASoC: jz4740-i2s: Fix divider written at incorrect offset in register commit 9401d5aa328e64617d87abd59af1c91cace4c3e4 upstream. The 4-bit divider value was written at offset 8, while the jz4740 programming manual locates it at offset 0. Fixes: 26b0aad80a86 ("ASoC: jz4740: Add dynamic sampling rate support to jz4740-i2s") Signed-off-by: Paul Cercueil Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20200306222931.39664-2-paul@crapouillou.net Signed-off-by: Mark Brown Signed-off-by: Greg Kroah-Hartman --- sound/soc/jz4740/jz4740-i2s.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/soc/jz4740/jz4740-i2s.c b/sound/soc/jz4740/jz4740-i2s.c index 13408de34055..0bbd86390be5 100644 --- a/sound/soc/jz4740/jz4740-i2s.c +++ b/sound/soc/jz4740/jz4740-i2s.c @@ -83,7 +83,7 @@ #define JZ_AIC_I2S_STATUS_BUSY BIT(2) #define JZ_AIC_CLK_DIV_MASK 0xf -#define I2SDIV_DV_SHIFT 8 +#define I2SDIV_DV_SHIFT 0 #define I2SDIV_DV_MASK (0xf << I2SDIV_DV_SHIFT) #define I2SDIV_IDV_SHIFT 8 #define I2SDIV_IDV_MASK (0xf << I2SDIV_IDV_SHIFT) From cd38d8b231f16a4825597081794fa2253836912d Mon Sep 17 00:00:00 2001 From: Kaike Wan Date: Thu, 26 Mar 2020 12:38:14 -0400 Subject: [PATCH 119/136] IB/hfi1: Call kobject_put() when kobject_init_and_add() fails commit dfb5394f804ed4fcea1fc925be275a38d66712ab upstream. When kobject_init_and_add() returns an error in the function hfi1_create_port_files(), the function kobject_put() is not called for the corresponding kobject, which potentially leads to memory leak. This patch fixes the issue by calling kobject_put() even if kobject_init_and_add() fails. Cc: Link: https://lore.kernel.org/r/20200326163813.21129.44280.stgit@awfm-01.aw.intel.com Reviewed-by: Mike Marciniszyn Signed-off-by: Kaike Wan Signed-off-by: Dennis Dalessandro Signed-off-by: Jason Gunthorpe Signed-off-by: Greg Kroah-Hartman --- drivers/infiniband/hw/hfi1/sysfs.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/infiniband/hw/hfi1/sysfs.c b/drivers/infiniband/hw/hfi1/sysfs.c index 90f62c4bddba..37e9861adc07 100644 --- a/drivers/infiniband/hw/hfi1/sysfs.c +++ b/drivers/infiniband/hw/hfi1/sysfs.c @@ -674,7 +674,11 @@ int hfi1_create_port_files(struct ib_device *ibdev, u8 port_num, dd_dev_err(dd, "Skipping sc2vl sysfs info, (err %d) port %u\n", ret, port_num); - goto bail; + /* + * Based on the documentation for kobject_init_and_add(), the + * caller should call kobject_put even if this call fails. + */ + goto bail_sc2vl; } kobject_uevent(&ppd->sc2vl_kobj, KOBJ_ADD); @@ -684,7 +688,7 @@ int hfi1_create_port_files(struct ib_device *ibdev, u8 port_num, dd_dev_err(dd, "Skipping sl2sc sysfs info, (err %d) port %u\n", ret, port_num); - goto bail_sc2vl; + goto bail_sl2sc; } kobject_uevent(&ppd->sl2sc_kobj, KOBJ_ADD); @@ -694,7 +698,7 @@ int hfi1_create_port_files(struct ib_device *ibdev, u8 port_num, dd_dev_err(dd, "Skipping vl2mtu sysfs info, (err %d) port %u\n", ret, port_num); - goto bail_sl2sc; + goto bail_vl2mtu; } kobject_uevent(&ppd->vl2mtu_kobj, KOBJ_ADD); @@ -704,7 +708,7 @@ int hfi1_create_port_files(struct ib_device *ibdev, u8 port_num, dd_dev_err(dd, "Skipping Congestion Control sysfs info, (err %d) port %u\n", ret, port_num); - goto bail_vl2mtu; + goto bail_cc; } kobject_uevent(&ppd->pport_cc_kobj, KOBJ_ADD); @@ -742,7 +746,6 @@ int hfi1_create_port_files(struct ib_device *ibdev, u8 port_num, kobject_put(&ppd->sl2sc_kobj); bail_sc2vl: kobject_put(&ppd->sc2vl_kobj); -bail: return ret; } From ccc2b645de20e0e175c7832630d65ad52b7bebc0 Mon Sep 17 00:00:00 2001 From: Kaike Wan Date: Thu, 26 Mar 2020 12:38:07 -0400 Subject: [PATCH 120/136] IB/hfi1: Fix memory leaks in sysfs registration and unregistration commit 5c15abc4328ad696fa61e2f3604918ed0c207755 upstream. When the hfi1 driver is unloaded, kmemleak will report the following issue: unreferenced object 0xffff8888461a4c08 (size 8): comm "kworker/0:0", pid 5, jiffies 4298601264 (age 2047.134s) hex dump (first 8 bytes): 73 64 6d 61 30 00 ff ff sdma0... backtrace: [<00000000311a6ef5>] kvasprintf+0x62/0xd0 [<00000000ade94d9f>] kobject_set_name_vargs+0x1c/0x90 [<0000000060657dbb>] kobject_init_and_add+0x5d/0xb0 [<00000000346fe72b>] 0xffffffffa0c5ecba [<000000006cfc5819>] 0xffffffffa0c866b9 [<0000000031c65580>] 0xffffffffa0c38e87 [<00000000e9739b3f>] local_pci_probe+0x41/0x80 [<000000006c69911d>] work_for_cpu_fn+0x16/0x20 [<00000000601267b5>] process_one_work+0x171/0x380 [<0000000049a0eefa>] worker_thread+0x1d1/0x3f0 [<00000000909cf2b9>] kthread+0xf8/0x130 [<0000000058f5f874>] ret_from_fork+0x35/0x40 This patch fixes the issue by: - Releasing dd->per_sdma[i].kobject in hfi1_unregister_sysfs(). - This will fix the memory leak. - Calling kobject_put() to unwind operations only for those entries in dd->per_sdma[] whose operations have succeeded (including the current one that has just failed) in hfi1_verbs_register_sysfs(). Cc: Fixes: 0cb2aa690c7e ("IB/hfi1: Add sysfs interface for affinity setup") Link: https://lore.kernel.org/r/20200326163807.21129.27371.stgit@awfm-01.aw.intel.com Reviewed-by: Mike Marciniszyn Signed-off-by: Kaike Wan Signed-off-by: Dennis Dalessandro Signed-off-by: Jason Gunthorpe Signed-off-by: Greg Kroah-Hartman --- drivers/infiniband/hw/hfi1/sysfs.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/infiniband/hw/hfi1/sysfs.c b/drivers/infiniband/hw/hfi1/sysfs.c index 37e9861adc07..074ec71772d2 100644 --- a/drivers/infiniband/hw/hfi1/sysfs.c +++ b/drivers/infiniband/hw/hfi1/sysfs.c @@ -856,8 +856,13 @@ int hfi1_verbs_register_sysfs(struct hfi1_devdata *dd) return 0; bail: - for (i = 0; i < dd->num_sdma; i++) - kobject_del(&dd->per_sdma[i].kobj); + /* + * The function kobject_put() will call kobject_del() if the kobject + * has been added successfully. The sysfs files created under the + * kobject directory will also be removed during the process. + */ + for (; i >= 0; i--) + kobject_put(&dd->per_sdma[i].kobj); return ret; } @@ -870,6 +875,10 @@ void hfi1_verbs_unregister_sysfs(struct hfi1_devdata *dd) struct hfi1_pportdata *ppd; int i; + /* Unwind operations in hfi1_verbs_register_sysfs() */ + for (i = 0; i < dd->num_sdma; i++) + kobject_put(&dd->per_sdma[i].kobj); + for (i = 0; i < dd->num_pports; i++) { ppd = &dd->pport[i]; From 4ac80b02f10dc027d93ab246e4736f6a739f248c Mon Sep 17 00:00:00 2001 From: Alex Vesker Date: Thu, 5 Mar 2020 14:38:41 +0200 Subject: [PATCH 121/136] IB/mlx5: Replace tunnel mpls capability bits for tunnel_offloads commit 41e684ef3f37ce6e5eac3fb5b9c7c1853f4b0447 upstream. Until now the flex parser capability was used in ib_query_device() to indicate tunnel_offloads_caps support for mpls_over_gre/mpls_over_udp. Newer devices and firmware will have configurations with the flexparser but without mpls support. Testing for the flex parser capability was a mistake, the tunnel_stateless capability was intended for detecting mpls and was introduced at the same time as the flex parser capability. Otherwise userspace will be incorrectly informed that a future device supports MPLS when it does not. Link: https://lore.kernel.org/r/20200305123841.196086-1-leon@kernel.org Cc: # 4.17 Fixes: e818e255a58d ("IB/mlx5: Expose MPLS related tunneling offloads") Signed-off-by: Alex Vesker Reviewed-by: Ariel Levkovich Signed-off-by: Leon Romanovsky Signed-off-by: Jason Gunthorpe Signed-off-by: Greg Kroah-Hartman --- drivers/infiniband/hw/mlx5/main.c | 6 ++---- include/linux/mlx5/mlx5_ifc.h | 6 +++++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c index 0a160fd1383a..4f44a731a48e 100644 --- a/drivers/infiniband/hw/mlx5/main.c +++ b/drivers/infiniband/hw/mlx5/main.c @@ -1181,12 +1181,10 @@ static int mlx5_ib_query_device(struct ib_device *ibdev, if (MLX5_CAP_ETH(mdev, tunnel_stateless_gre)) resp.tunnel_offloads_caps |= MLX5_IB_TUNNELED_OFFLOADS_GRE; - if (MLX5_CAP_GEN(mdev, flex_parser_protocols) & - MLX5_FLEX_PROTO_CW_MPLS_GRE) + if (MLX5_CAP_ETH(mdev, tunnel_stateless_mpls_over_gre)) resp.tunnel_offloads_caps |= MLX5_IB_TUNNELED_OFFLOADS_MPLS_GRE; - if (MLX5_CAP_GEN(mdev, flex_parser_protocols) & - MLX5_FLEX_PROTO_CW_MPLS_UDP) + if (MLX5_CAP_ETH(mdev, tunnel_stateless_mpls_over_udp)) resp.tunnel_offloads_caps |= MLX5_IB_TUNNELED_OFFLOADS_MPLS_UDP; } diff --git a/include/linux/mlx5/mlx5_ifc.h b/include/linux/mlx5/mlx5_ifc.h index 0cdc8d12785a..acd859ea09d4 100644 --- a/include/linux/mlx5/mlx5_ifc.h +++ b/include/linux/mlx5/mlx5_ifc.h @@ -857,7 +857,11 @@ struct mlx5_ifc_per_protocol_networking_offload_caps_bits { u8 swp_csum[0x1]; u8 swp_lso[0x1]; u8 cqe_checksum_full[0x1]; - u8 reserved_at_24[0x5]; + u8 tunnel_stateless_geneve_tx[0x1]; + u8 tunnel_stateless_mpls_over_udp[0x1]; + u8 tunnel_stateless_mpls_over_gre[0x1]; + u8 tunnel_stateless_vxlan_gpe[0x1]; + u8 tunnel_stateless_ipv4_over_vxlan[0x1]; u8 tunnel_stateless_ip_over_ip[0x1]; u8 reserved_at_2a[0x6]; u8 max_vxlan_udp_ports[0x8]; From cf70056626733696dfc008036641721788ad6c9a Mon Sep 17 00:00:00 2001 From: Anson Huang Date: Wed, 11 Dec 2019 10:53:36 +0800 Subject: [PATCH 122/136] ARM: imx: Enable ARM_ERRATA_814220 for i.MX6UL and i.MX7D commit 4562fa4c86c92a2df635fe0697c9e06379738741 upstream. ARM_ERRATA_814220 has below description: The v7 ARM states that all cache and branch predictor maintenance operations that do not specify an address execute, relative to each other, in program order. However, because of this erratum, an L2 set/way cache maintenance operation can overtake an L1 set/way cache maintenance operation. This ERRATA only affected the Cortex-A7 and present in r0p2, r0p3, r0p4, r0p5. i.MX6UL and i.MX7D have Cortex-A7 r0p5 inside, need to enable ARM_ERRATA_814220 for proper workaround. Signed-off-by: Anson Huang Signed-off-by: Shawn Guo Cc: Christian Eggers Signed-off-by: Greg Kroah-Hartman --- arch/arm/mach-imx/Kconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 593bf1519608..4326c8f53462 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -520,6 +520,7 @@ config SOC_IMX6UL bool "i.MX6 UltraLite support" select PINCTRL_IMX6UL select SOC_IMX6 + select ARM_ERRATA_814220 help This enables support for Freescale i.MX6 UltraLite processor. @@ -556,6 +557,7 @@ config SOC_IMX7D select PINCTRL_IMX7D select SOC_IMX7D_CA7 if ARCH_MULTI_V7 select SOC_IMX7D_CM4 if ARM_SINGLE_ARMV7M + select ARM_ERRATA_814220 help This enables support for Freescale i.MX7 Dual processor. From 7dafb2c6fb46166af9fa4c3c57493a48f6ff2950 Mon Sep 17 00:00:00 2001 From: Arnd Bergmann Date: Tue, 7 Jan 2020 22:51:39 +0100 Subject: [PATCH 123/136] ARM: imx: only select ARM_ERRATA_814220 for ARMv7-A commit c74067a0f776c1d695a713a4388c3b6a094ee40a upstream. i.MX7D is supported for either the v7-A or the v7-M cores, but the latter causes a warning: WARNING: unmet direct dependencies detected for ARM_ERRATA_814220 Depends on [n]: CPU_V7 [=n] Selected by [y]: - SOC_IMX7D [=y] && ARCH_MXC [=y] && (ARCH_MULTI_V7 [=n] || ARM_SINGLE_ARMV7M [=y]) Make the select statement conditional. Fixes: 4562fa4c86c9 ("ARM: imx: Enable ARM_ERRATA_814220 for i.MX6UL and i.MX7D") Signed-off-by: Arnd Bergmann Signed-off-by: Shawn Guo Cc: Christian Eggers Signed-off-by: Greg Kroah-Hartman --- arch/arm/mach-imx/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 4326c8f53462..95584ee02b55 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -557,7 +557,7 @@ config SOC_IMX7D select PINCTRL_IMX7D select SOC_IMX7D_CA7 if ARCH_MULTI_V7 select SOC_IMX7D_CM4 if ARM_SINGLE_ARMV7M - select ARM_ERRATA_814220 + select ARM_ERRATA_814220 if ARCH_MULTI_V7 help This enables support for Freescale i.MX7 Dual processor. From 56385788f7f6ce5389030a7cc72c54a461b85224 Mon Sep 17 00:00:00 2001 From: Xiubo Li Date: Fri, 20 Dec 2019 09:34:04 -0500 Subject: [PATCH 124/136] ceph: remove the extra slashes in the server path commit 4fbc0c711b2464ee1551850b85002faae0b775d5 upstream. It's possible to pass the mount helper a server path that has more than one contiguous slash character. For example: $ mount -t ceph 192.168.195.165:40176:/// /mnt/cephfs/ In the MDS server side the extra slashes of the server path will be treated as snap dir, and then we can get the following debug logs: ceph: mount opening path // ceph: open_root_inode opening '//' ceph: fill_trace 0000000059b8a3bc is_dentry 0 is_target 1 ceph: alloc_inode 00000000dc4ca00b ceph: get_inode created new inode 00000000dc4ca00b 1.ffffffffffffffff ino 1 ceph: get_inode on 1=1.ffffffffffffffff got 00000000dc4ca00b And then when creating any new file or directory under the mount point, we can hit the following BUG_ON in ceph_fill_trace(): BUG_ON(ceph_snap(dir) != dvino.snap); Have the client ignore the extra slashes in the server path when mounting. This will also canonicalize the path, so that identical mounts can be consilidated. 1) "//mydir1///mydir//" 2) "/mydir1/mydir" 3) "/mydir1/mydir/" Regardless of the internal treatment of these paths, the kernel still stores the original string including the leading '/' for presentation to userland. URL: https://tracker.ceph.com/issues/42771 Signed-off-by: Xiubo Li Reviewed-by: Jeff Layton Signed-off-by: Ilya Dryomov Signed-off-by: Luis Henriques Signed-off-by: Greg Kroah-Hartman --- fs/ceph/super.c | 120 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 101 insertions(+), 19 deletions(-) diff --git a/fs/ceph/super.c b/fs/ceph/super.c index 62fc7d46032e..54b50452ec1e 100644 --- a/fs/ceph/super.c +++ b/fs/ceph/super.c @@ -106,7 +106,6 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf) return 0; } - static int ceph_sync_fs(struct super_block *sb, int wait) { struct ceph_fs_client *fsc = ceph_sb_to_client(sb); @@ -430,6 +429,73 @@ static int strcmp_null(const char *s1, const char *s2) return strcmp(s1, s2); } +/** + * path_remove_extra_slash - Remove the extra slashes in the server path + * @server_path: the server path and could be NULL + * + * Return NULL if the path is NULL or only consists of "/", or a string + * without any extra slashes including the leading slash(es) and the + * slash(es) at the end of the server path, such as: + * "//dir1////dir2///" --> "dir1/dir2" + */ +static char *path_remove_extra_slash(const char *server_path) +{ + const char *path = server_path; + const char *cur, *end; + char *buf, *p; + int len; + + /* if the server path is omitted */ + if (!path) + return NULL; + + /* remove all the leading slashes */ + while (*path == '/') + path++; + + /* if the server path only consists of slashes */ + if (*path == '\0') + return NULL; + + len = strlen(path); + + buf = kmalloc(len + 1, GFP_KERNEL); + if (!buf) + return ERR_PTR(-ENOMEM); + + end = path + len; + p = buf; + do { + cur = strchr(path, '/'); + if (!cur) + cur = end; + + len = cur - path; + + /* including one '/' */ + if (cur != end) + len += 1; + + memcpy(p, path, len); + p += len; + + while (cur <= end && *cur == '/') + cur++; + path = cur; + } while (path < end); + + *p = '\0'; + + /* + * remove the last slash if there has and just to make sure that + * we will get something like "dir1/dir2" + */ + if (*(--p) == '/') + *p = '\0'; + + return buf; +} + static int compare_mount_options(struct ceph_mount_options *new_fsopt, struct ceph_options *new_opt, struct ceph_fs_client *fsc) @@ -437,6 +503,7 @@ static int compare_mount_options(struct ceph_mount_options *new_fsopt, struct ceph_mount_options *fsopt1 = new_fsopt; struct ceph_mount_options *fsopt2 = fsc->mount_options; int ofs = offsetof(struct ceph_mount_options, snapdir_name); + char *p1, *p2; int ret; ret = memcmp(fsopt1, fsopt2, ofs); @@ -449,9 +516,21 @@ static int compare_mount_options(struct ceph_mount_options *new_fsopt, ret = strcmp_null(fsopt1->mds_namespace, fsopt2->mds_namespace); if (ret) return ret; - ret = strcmp_null(fsopt1->server_path, fsopt2->server_path); + + p1 = path_remove_extra_slash(fsopt1->server_path); + if (IS_ERR(p1)) + return PTR_ERR(p1); + p2 = path_remove_extra_slash(fsopt2->server_path); + if (IS_ERR(p2)) { + kfree(p1); + return PTR_ERR(p2); + } + ret = strcmp_null(p1, p2); + kfree(p1); + kfree(p2); if (ret) return ret; + ret = strcmp_null(fsopt1->fscache_uniq, fsopt2->fscache_uniq); if (ret) return ret; @@ -507,12 +586,14 @@ static int parse_mount_options(struct ceph_mount_options **pfsopt, */ dev_name_end = strchr(dev_name, '/'); if (dev_name_end) { - if (strlen(dev_name_end) > 1) { - fsopt->server_path = kstrdup(dev_name_end, GFP_KERNEL); - if (!fsopt->server_path) { - err = -ENOMEM; - goto out; - } + /* + * The server_path will include the whole chars from userland + * including the leading '/'. + */ + fsopt->server_path = kstrdup(dev_name_end, GFP_KERNEL); + if (!fsopt->server_path) { + err = -ENOMEM; + goto out; } } else { dev_name_end = dev_name + strlen(dev_name); @@ -842,7 +923,6 @@ static void destroy_caches(void) ceph_fscache_unregister(); } - /* * ceph_umount_begin - initiate forced umount. Tear down down the * mount, skipping steps that may hang while waiting for server(s). @@ -929,9 +1009,6 @@ static struct dentry *open_root_dentry(struct ceph_fs_client *fsc, return root; } - - - /* * mount: join the ceph cluster, and open root directory. */ @@ -945,7 +1022,7 @@ static struct dentry *ceph_real_mount(struct ceph_fs_client *fsc) mutex_lock(&fsc->client->mount_mutex); if (!fsc->sb->s_root) { - const char *path; + const char *path, *p; err = __ceph_open_session(fsc->client, started); if (err < 0) goto out; @@ -957,17 +1034,22 @@ static struct dentry *ceph_real_mount(struct ceph_fs_client *fsc) goto out; } - if (!fsc->mount_options->server_path) { - path = ""; - dout("mount opening path \\t\n"); - } else { - path = fsc->mount_options->server_path + 1; - dout("mount opening path %s\n", path); + p = path_remove_extra_slash(fsc->mount_options->server_path); + if (IS_ERR(p)) { + err = PTR_ERR(p); + goto out; } + /* if the server path is omitted or just consists of '/' */ + if (!p) + path = ""; + else + path = p; + dout("mount opening path '%s'\n", path); ceph_fs_debugfs_init(fsc); root = open_root_dentry(fsc, path, started); + kfree(p); if (IS_ERR(root)) { err = PTR_ERR(root); goto out; From 193490dbe5ba5a3c8aa0e61312d67142483c9498 Mon Sep 17 00:00:00 2001 From: Ilya Dryomov Date: Mon, 10 Feb 2020 22:51:08 +0100 Subject: [PATCH 125/136] ceph: canonicalize server path in place commit b27a939e8376a3f1ed09b9c33ef44d20f18ec3d0 upstream. syzbot reported that 4fbc0c711b24 ("ceph: remove the extra slashes in the server path") had caused a regression where an allocation could be done under a spinlock -- compare_mount_options() is called by sget_fc() with sb_lock held. We don't really need the supplied server path, so canonicalize it in place and compare it directly. To make this work, the leading slash is kept around and the logic in ceph_real_mount() to skip it is restored. CEPH_MSG_CLIENT_SESSION now reports the same (i.e. canonicalized) path, with the leading slash of course. Fixes: 4fbc0c711b24 ("ceph: remove the extra slashes in the server path") Reported-by: syzbot+98704a51af8e3d9425a9@syzkaller.appspotmail.com Signed-off-by: Ilya Dryomov Reviewed-by: Jeff Layton Signed-off-by: Luis Henriques Signed-off-by: Greg Kroah-Hartman --- fs/ceph/super.c | 118 +++++++++++------------------------------------- fs/ceph/super.h | 2 +- 2 files changed, 28 insertions(+), 92 deletions(-) diff --git a/fs/ceph/super.c b/fs/ceph/super.c index 54b50452ec1e..d40658d5e808 100644 --- a/fs/ceph/super.c +++ b/fs/ceph/super.c @@ -214,6 +214,26 @@ static match_table_t fsopt_tokens = { {-1, NULL} }; +/* + * Remove adjacent slashes and then the trailing slash, unless it is + * the only remaining character. + * + * E.g. "//dir1////dir2///" --> "/dir1/dir2", "///" --> "/". + */ +static void canonicalize_path(char *path) +{ + int i, j = 0; + + for (i = 0; path[i] != '\0'; i++) { + if (path[i] != '/' || j < 1 || path[j - 1] != '/') + path[j++] = path[i]; + } + + if (j > 1 && path[j - 1] == '/') + j--; + path[j] = '\0'; +} + static int parse_fsopt_token(char *c, void *private) { struct ceph_mount_options *fsopt = private; @@ -429,73 +449,6 @@ static int strcmp_null(const char *s1, const char *s2) return strcmp(s1, s2); } -/** - * path_remove_extra_slash - Remove the extra slashes in the server path - * @server_path: the server path and could be NULL - * - * Return NULL if the path is NULL or only consists of "/", or a string - * without any extra slashes including the leading slash(es) and the - * slash(es) at the end of the server path, such as: - * "//dir1////dir2///" --> "dir1/dir2" - */ -static char *path_remove_extra_slash(const char *server_path) -{ - const char *path = server_path; - const char *cur, *end; - char *buf, *p; - int len; - - /* if the server path is omitted */ - if (!path) - return NULL; - - /* remove all the leading slashes */ - while (*path == '/') - path++; - - /* if the server path only consists of slashes */ - if (*path == '\0') - return NULL; - - len = strlen(path); - - buf = kmalloc(len + 1, GFP_KERNEL); - if (!buf) - return ERR_PTR(-ENOMEM); - - end = path + len; - p = buf; - do { - cur = strchr(path, '/'); - if (!cur) - cur = end; - - len = cur - path; - - /* including one '/' */ - if (cur != end) - len += 1; - - memcpy(p, path, len); - p += len; - - while (cur <= end && *cur == '/') - cur++; - path = cur; - } while (path < end); - - *p = '\0'; - - /* - * remove the last slash if there has and just to make sure that - * we will get something like "dir1/dir2" - */ - if (*(--p) == '/') - *p = '\0'; - - return buf; -} - static int compare_mount_options(struct ceph_mount_options *new_fsopt, struct ceph_options *new_opt, struct ceph_fs_client *fsc) @@ -503,7 +456,6 @@ static int compare_mount_options(struct ceph_mount_options *new_fsopt, struct ceph_mount_options *fsopt1 = new_fsopt; struct ceph_mount_options *fsopt2 = fsc->mount_options; int ofs = offsetof(struct ceph_mount_options, snapdir_name); - char *p1, *p2; int ret; ret = memcmp(fsopt1, fsopt2, ofs); @@ -513,21 +465,12 @@ static int compare_mount_options(struct ceph_mount_options *new_fsopt, ret = strcmp_null(fsopt1->snapdir_name, fsopt2->snapdir_name); if (ret) return ret; + ret = strcmp_null(fsopt1->mds_namespace, fsopt2->mds_namespace); if (ret) return ret; - p1 = path_remove_extra_slash(fsopt1->server_path); - if (IS_ERR(p1)) - return PTR_ERR(p1); - p2 = path_remove_extra_slash(fsopt2->server_path); - if (IS_ERR(p2)) { - kfree(p1); - return PTR_ERR(p2); - } - ret = strcmp_null(p1, p2); - kfree(p1); - kfree(p2); + ret = strcmp_null(fsopt1->server_path, fsopt2->server_path); if (ret) return ret; @@ -595,6 +538,8 @@ static int parse_mount_options(struct ceph_mount_options **pfsopt, err = -ENOMEM; goto out; } + + canonicalize_path(fsopt->server_path); } else { dev_name_end = dev_name + strlen(dev_name); } @@ -1022,7 +967,9 @@ static struct dentry *ceph_real_mount(struct ceph_fs_client *fsc) mutex_lock(&fsc->client->mount_mutex); if (!fsc->sb->s_root) { - const char *path, *p; + const char *path = fsc->mount_options->server_path ? + fsc->mount_options->server_path + 1 : ""; + err = __ceph_open_session(fsc->client, started); if (err < 0) goto out; @@ -1034,22 +981,11 @@ static struct dentry *ceph_real_mount(struct ceph_fs_client *fsc) goto out; } - p = path_remove_extra_slash(fsc->mount_options->server_path); - if (IS_ERR(p)) { - err = PTR_ERR(p); - goto out; - } - /* if the server path is omitted or just consists of '/' */ - if (!p) - path = ""; - else - path = p; dout("mount opening path '%s'\n", path); ceph_fs_debugfs_init(fsc); root = open_root_dentry(fsc, path, started); - kfree(p); if (IS_ERR(root)) { err = PTR_ERR(root); goto out; diff --git a/fs/ceph/super.h b/fs/ceph/super.h index f98d9247f9cb..bb12c9f3a218 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h @@ -92,7 +92,7 @@ struct ceph_mount_options { char *snapdir_name; /* default ".snap" */ char *mds_namespace; /* default NULL */ - char *server_path; /* default "/" */ + char *server_path; /* default NULL (means "/") */ char *fscache_uniq; /* default NULL */ }; From ab6ee433028847c3e0e6c0c47e7740a42c1f0c00 Mon Sep 17 00:00:00 2001 From: Christian Borntraeger Date: Thu, 20 Feb 2020 20:04:03 -0800 Subject: [PATCH 126/136] include/uapi/linux/swab.h: fix userspace breakage, use __BITS_PER_LONG for swap commit 467d12f5c7842896d2de3ced74e4147ee29e97c8 upstream. QEMU has a funny new build error message when I use the upstream kernel headers: CC block/file-posix.o In file included from /home/cborntra/REPOS/qemu/include/qemu/timer.h:4, from /home/cborntra/REPOS/qemu/include/qemu/timed-average.h:29, from /home/cborntra/REPOS/qemu/include/block/accounting.h:28, from /home/cborntra/REPOS/qemu/include/block/block_int.h:27, from /home/cborntra/REPOS/qemu/block/file-posix.c:30: /usr/include/linux/swab.h: In function `__swab': /home/cborntra/REPOS/qemu/include/qemu/bitops.h:20:34: error: "sizeof" is not defined, evaluates to 0 [-Werror=undef] 20 | #define BITS_PER_LONG (sizeof (unsigned long) * BITS_PER_BYTE) | ^~~~~~ /home/cborntra/REPOS/qemu/include/qemu/bitops.h:20:41: error: missing binary operator before token "(" 20 | #define BITS_PER_LONG (sizeof (unsigned long) * BITS_PER_BYTE) | ^ cc1: all warnings being treated as errors make: *** [/home/cborntra/REPOS/qemu/rules.mak:69: block/file-posix.o] Error 1 rm tests/qemu-iotests/socket_scm_helper.o This was triggered by commit d5767057c9a ("uapi: rename ext2_swab() to swab() and share globally in swab.h"). That patch is doing #include but it uses BITS_PER_LONG. The kernel file asm/bitsperlong.h provide only __BITS_PER_LONG. Let us use the __ variant in swap.h Link: http://lkml.kernel.org/r/20200213142147.17604-1-borntraeger@de.ibm.com Fixes: d5767057c9a ("uapi: rename ext2_swab() to swab() and share globally in swab.h") Signed-off-by: Christian Borntraeger Cc: Yury Norov Cc: Allison Randal Cc: Joe Perches Cc: Thomas Gleixner Cc: William Breathitt Gray Cc: Torsten Hilbrich Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- include/uapi/linux/swab.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/uapi/linux/swab.h b/include/uapi/linux/swab.h index fa7f97da5b76..7272f85d6d6a 100644 --- a/include/uapi/linux/swab.h +++ b/include/uapi/linux/swab.h @@ -135,9 +135,9 @@ static inline __attribute_const__ __u32 __fswahb32(__u32 val) static __always_inline unsigned long __swab(const unsigned long y) { -#if BITS_PER_LONG == 64 +#if __BITS_PER_LONG == 64 return __swab64(y); -#else /* BITS_PER_LONG == 32 */ +#else /* __BITS_PER_LONG == 32 */ return __swab32(y); #endif } From 51795bcf595d9cfbae6e17cdfd02c25db9b3a62c Mon Sep 17 00:00:00 2001 From: Jason Gunthorpe Date: Tue, 18 Feb 2020 15:45:38 -0400 Subject: [PATCH 127/136] RDMA/ucma: Put a lock around every call to the rdma_cm layer commit 7c11910783a1ea17e88777552ef146cace607b3c upstream. The rdma_cm must be used single threaded. This appears to be a bug in the design, as it does have lots of locking that seems like it should allow concurrency. However, when it is all said and done every single place that uses the cma_exch() scheme is broken, and all the unlocked reads from the ucma of the cm_id data are wrong too. syzkaller has been finding endless bugs related to this. Fixing this in any elegant way is some enormous amount of work. Take a very big hammer and put a mutex around everything to do with the ucma_context at the top of every syscall. Fixes: 75216638572f ("RDMA/cma: Export rdma cm interface to userspace") Link: https://lore.kernel.org/r/20200218210432.GA31966@ziepe.ca Reported-by: syzbot+adb15cf8c2798e4e0db4@syzkaller.appspotmail.com Reported-by: syzbot+e5579222b6a3edd96522@syzkaller.appspotmail.com Reported-by: syzbot+4b628fcc748474003457@syzkaller.appspotmail.com Reported-by: syzbot+29ee8f76017ce6cf03da@syzkaller.appspotmail.com Reported-by: syzbot+6956235342b7317ec564@syzkaller.appspotmail.com Reported-by: syzbot+b358909d8d01556b790b@syzkaller.appspotmail.com Reported-by: syzbot+6b46b135602a3f3ac99e@syzkaller.appspotmail.com Reported-by: syzbot+8458d13b13562abf6b77@syzkaller.appspotmail.com Reported-by: syzbot+bd034f3fdc0402e942ed@syzkaller.appspotmail.com Reported-by: syzbot+c92378b32760a4eef756@syzkaller.appspotmail.com Reported-by: syzbot+68b44a1597636e0b342c@syzkaller.appspotmail.com Signed-off-by: Jason Gunthorpe Signed-off-by: Greg Kroah-Hartman --- drivers/infiniband/core/ucma.c | 49 ++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c index 0274e9b704be..f4f79f1292b9 100644 --- a/drivers/infiniband/core/ucma.c +++ b/drivers/infiniband/core/ucma.c @@ -91,6 +91,7 @@ struct ucma_context { struct ucma_file *file; struct rdma_cm_id *cm_id; + struct mutex mutex; u64 uid; struct list_head list; @@ -216,6 +217,7 @@ static struct ucma_context *ucma_alloc_ctx(struct ucma_file *file) init_completion(&ctx->comp); INIT_LIST_HEAD(&ctx->mc_list); ctx->file = file; + mutex_init(&ctx->mutex); if (xa_alloc(&ctx_table, &ctx->id, ctx, xa_limit_32b, GFP_KERNEL)) goto error; @@ -589,6 +591,7 @@ static int ucma_free_ctx(struct ucma_context *ctx) } events_reported = ctx->events_reported; + mutex_destroy(&ctx->mutex); kfree(ctx); return events_reported; } @@ -658,7 +661,10 @@ static ssize_t ucma_bind_ip(struct ucma_file *file, const char __user *inbuf, if (IS_ERR(ctx)) return PTR_ERR(ctx); + mutex_lock(&ctx->mutex); ret = rdma_bind_addr(ctx->cm_id, (struct sockaddr *) &cmd.addr); + mutex_unlock(&ctx->mutex); + ucma_put_ctx(ctx); return ret; } @@ -681,7 +687,9 @@ static ssize_t ucma_bind(struct ucma_file *file, const char __user *inbuf, if (IS_ERR(ctx)) return PTR_ERR(ctx); + mutex_lock(&ctx->mutex); ret = rdma_bind_addr(ctx->cm_id, (struct sockaddr *) &cmd.addr); + mutex_unlock(&ctx->mutex); ucma_put_ctx(ctx); return ret; } @@ -705,8 +713,10 @@ static ssize_t ucma_resolve_ip(struct ucma_file *file, if (IS_ERR(ctx)) return PTR_ERR(ctx); + mutex_lock(&ctx->mutex); ret = rdma_resolve_addr(ctx->cm_id, (struct sockaddr *) &cmd.src_addr, (struct sockaddr *) &cmd.dst_addr, cmd.timeout_ms); + mutex_unlock(&ctx->mutex); ucma_put_ctx(ctx); return ret; } @@ -731,8 +741,10 @@ static ssize_t ucma_resolve_addr(struct ucma_file *file, if (IS_ERR(ctx)) return PTR_ERR(ctx); + mutex_lock(&ctx->mutex); ret = rdma_resolve_addr(ctx->cm_id, (struct sockaddr *) &cmd.src_addr, (struct sockaddr *) &cmd.dst_addr, cmd.timeout_ms); + mutex_unlock(&ctx->mutex); ucma_put_ctx(ctx); return ret; } @@ -752,7 +764,9 @@ static ssize_t ucma_resolve_route(struct ucma_file *file, if (IS_ERR(ctx)) return PTR_ERR(ctx); + mutex_lock(&ctx->mutex); ret = rdma_resolve_route(ctx->cm_id, cmd.timeout_ms); + mutex_unlock(&ctx->mutex); ucma_put_ctx(ctx); return ret; } @@ -841,6 +855,7 @@ static ssize_t ucma_query_route(struct ucma_file *file, if (IS_ERR(ctx)) return PTR_ERR(ctx); + mutex_lock(&ctx->mutex); memset(&resp, 0, sizeof resp); addr = (struct sockaddr *) &ctx->cm_id->route.addr.src_addr; memcpy(&resp.src_addr, addr, addr->sa_family == AF_INET ? @@ -864,6 +879,7 @@ static ssize_t ucma_query_route(struct ucma_file *file, ucma_copy_iw_route(&resp, &ctx->cm_id->route); out: + mutex_unlock(&ctx->mutex); if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof(resp))) ret = -EFAULT; @@ -1014,6 +1030,7 @@ static ssize_t ucma_query(struct ucma_file *file, if (IS_ERR(ctx)) return PTR_ERR(ctx); + mutex_lock(&ctx->mutex); switch (cmd.option) { case RDMA_USER_CM_QUERY_ADDR: ret = ucma_query_addr(ctx, response, out_len); @@ -1028,6 +1045,7 @@ static ssize_t ucma_query(struct ucma_file *file, ret = -ENOSYS; break; } + mutex_unlock(&ctx->mutex); ucma_put_ctx(ctx); return ret; @@ -1068,7 +1086,9 @@ static ssize_t ucma_connect(struct ucma_file *file, const char __user *inbuf, return PTR_ERR(ctx); ucma_copy_conn_param(ctx->cm_id, &conn_param, &cmd.conn_param); + mutex_lock(&ctx->mutex); ret = rdma_connect(ctx->cm_id, &conn_param); + mutex_unlock(&ctx->mutex); ucma_put_ctx(ctx); return ret; } @@ -1089,7 +1109,9 @@ static ssize_t ucma_listen(struct ucma_file *file, const char __user *inbuf, ctx->backlog = cmd.backlog > 0 && cmd.backlog < max_backlog ? cmd.backlog : max_backlog; + mutex_lock(&ctx->mutex); ret = rdma_listen(ctx->cm_id, ctx->backlog); + mutex_unlock(&ctx->mutex); ucma_put_ctx(ctx); return ret; } @@ -1112,13 +1134,17 @@ static ssize_t ucma_accept(struct ucma_file *file, const char __user *inbuf, if (cmd.conn_param.valid) { ucma_copy_conn_param(ctx->cm_id, &conn_param, &cmd.conn_param); mutex_lock(&file->mut); + mutex_lock(&ctx->mutex); ret = __rdma_accept(ctx->cm_id, &conn_param, NULL); + mutex_unlock(&ctx->mutex); if (!ret) ctx->uid = cmd.uid; mutex_unlock(&file->mut); - } else + } else { + mutex_lock(&ctx->mutex); ret = __rdma_accept(ctx->cm_id, NULL, NULL); - + mutex_unlock(&ctx->mutex); + } ucma_put_ctx(ctx); return ret; } @@ -1137,7 +1163,9 @@ static ssize_t ucma_reject(struct ucma_file *file, const char __user *inbuf, if (IS_ERR(ctx)) return PTR_ERR(ctx); + mutex_lock(&ctx->mutex); ret = rdma_reject(ctx->cm_id, cmd.private_data, cmd.private_data_len); + mutex_unlock(&ctx->mutex); ucma_put_ctx(ctx); return ret; } @@ -1156,7 +1184,9 @@ static ssize_t ucma_disconnect(struct ucma_file *file, const char __user *inbuf, if (IS_ERR(ctx)) return PTR_ERR(ctx); + mutex_lock(&ctx->mutex); ret = rdma_disconnect(ctx->cm_id); + mutex_unlock(&ctx->mutex); ucma_put_ctx(ctx); return ret; } @@ -1187,7 +1217,9 @@ static ssize_t ucma_init_qp_attr(struct ucma_file *file, resp.qp_attr_mask = 0; memset(&qp_attr, 0, sizeof qp_attr); qp_attr.qp_state = cmd.qp_state; + mutex_lock(&ctx->mutex); ret = rdma_init_qp_attr(ctx->cm_id, &qp_attr, &resp.qp_attr_mask); + mutex_unlock(&ctx->mutex); if (ret) goto out; @@ -1273,9 +1305,13 @@ static int ucma_set_ib_path(struct ucma_context *ctx, struct sa_path_rec opa; sa_convert_path_ib_to_opa(&opa, &sa_path); + mutex_lock(&ctx->mutex); ret = rdma_set_ib_path(ctx->cm_id, &opa); + mutex_unlock(&ctx->mutex); } else { + mutex_lock(&ctx->mutex); ret = rdma_set_ib_path(ctx->cm_id, &sa_path); + mutex_unlock(&ctx->mutex); } if (ret) return ret; @@ -1308,7 +1344,9 @@ static int ucma_set_option_level(struct ucma_context *ctx, int level, switch (level) { case RDMA_OPTION_ID: + mutex_lock(&ctx->mutex); ret = ucma_set_option_id(ctx, optname, optval, optlen); + mutex_unlock(&ctx->mutex); break; case RDMA_OPTION_IB: ret = ucma_set_option_ib(ctx, optname, optval, optlen); @@ -1368,8 +1406,10 @@ static ssize_t ucma_notify(struct ucma_file *file, const char __user *inbuf, if (IS_ERR(ctx)) return PTR_ERR(ctx); + mutex_lock(&ctx->mutex); if (ctx->cm_id->device) ret = rdma_notify(ctx->cm_id, (enum ib_event_type)cmd.event); + mutex_unlock(&ctx->mutex); ucma_put_ctx(ctx); return ret; @@ -1412,8 +1452,10 @@ static ssize_t ucma_process_join(struct ucma_file *file, mc->join_state = join_state; mc->uid = cmd->uid; memcpy(&mc->addr, addr, cmd->addr_size); + mutex_lock(&ctx->mutex); ret = rdma_join_multicast(ctx->cm_id, (struct sockaddr *)&mc->addr, join_state, mc); + mutex_unlock(&ctx->mutex); if (ret) goto err2; @@ -1513,7 +1555,10 @@ static ssize_t ucma_leave_multicast(struct ucma_file *file, goto out; } + mutex_lock(&mc->ctx->mutex); rdma_leave_multicast(mc->ctx->cm_id, (struct sockaddr *) &mc->addr); + mutex_unlock(&mc->ctx->mutex); + mutex_lock(&mc->ctx->file->mut); ucma_cleanup_mc_events(mc); list_del(&mc->list); From 09583e3f0402607cfc8b6de6ebd118778b05c929 Mon Sep 17 00:00:00 2001 From: Jason Gunthorpe Date: Thu, 27 Feb 2020 16:36:51 -0400 Subject: [PATCH 128/136] RDMA/cma: Teach lockdep about the order of rtnl and lock commit 32ac9e4399b12d3e54d312a0e0e30ed5cd19bd4e upstream. This lock ordering only happens when bonding is enabled and a certain bonding related event fires. However, since it can happen this is a global restriction on lock ordering. Teach lockdep about the order directly and unconditionally so bugs here are found quickly. See https://syzkaller.appspot.com/bug?extid=55de90ab5f44172b0c90 Link: https://lore.kernel.org/r/20200227203651.GA27185@ziepe.ca Signed-off-by: Jason Gunthorpe Signed-off-by: Greg Kroah-Hartman --- drivers/infiniband/core/cma.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index 6c12da176981..7c34b716aff9 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c @@ -4719,6 +4719,19 @@ static int __init cma_init(void) { int ret; + /* + * There is a rare lock ordering dependency in cma_netdev_callback() + * that only happens when bonding is enabled. Teach lockdep that rtnl + * must never be nested under lock so it can find these without having + * to test with bonding. + */ + if (IS_ENABLED(CONFIG_LOCKDEP)) { + rtnl_lock(); + mutex_lock(&lock); + mutex_unlock(&lock); + rtnl_unlock(); + } + cma_wq = alloc_ordered_workqueue("rdma_cm", WQ_MEM_RECLAIM); if (!cma_wq) return -ENOMEM; From 7f5432c2f446454d1b9376327227aed7c97287f0 Mon Sep 17 00:00:00 2001 From: Bernard Metzler Date: Fri, 28 Feb 2020 18:35:34 +0100 Subject: [PATCH 129/136] RDMA/siw: Fix passive connection establishment commit 33fb27fd54465c74cbffba6315b2f043e90cec4c upstream. Holding the rtnl_lock while iterating a devices interface address list potentially causes deadlocks with the cma_netdev_callback. While this was implemented to limit the scope of a wildcard listen to addresses of the current device only, a better solution limits the scope of the socket to the device. This completely avoiding locking, and also results in significant code simplification. Fixes: c421651fa229 ("RDMA/siw: Add missing rtnl_lock around access to ifa") Link: https://lore.kernel.org/r/20200228173534.26815-1-bmt@zurich.ibm.com Reported-by: syzbot+55de90ab5f44172b0c90@syzkaller.appspotmail.com Suggested-by: Jason Gunthorpe Signed-off-by: Bernard Metzler Signed-off-by: Jason Gunthorpe Signed-off-by: Greg Kroah-Hartman --- drivers/infiniband/sw/siw/siw_cm.c | 145 ++++++----------------------- 1 file changed, 31 insertions(+), 114 deletions(-) diff --git a/drivers/infiniband/sw/siw/siw_cm.c b/drivers/infiniband/sw/siw/siw_cm.c index 31aa41d85ccf..e3bac1a877bb 100644 --- a/drivers/infiniband/sw/siw/siw_cm.c +++ b/drivers/infiniband/sw/siw/siw_cm.c @@ -1783,14 +1783,23 @@ int siw_reject(struct iw_cm_id *id, const void *pdata, u8 pd_len) return 0; } -static int siw_listen_address(struct iw_cm_id *id, int backlog, - struct sockaddr *laddr, int addr_family) +/* + * siw_create_listen - Create resources for a listener's IWCM ID @id + * + * Starts listen on the socket address id->local_addr. + * + */ +int siw_create_listen(struct iw_cm_id *id, int backlog) { struct socket *s; struct siw_cep *cep = NULL; struct siw_device *sdev = to_siw_dev(id->device); + int addr_family = id->local_addr.ss_family; int rv = 0, s_val; + if (addr_family != AF_INET && addr_family != AF_INET6) + return -EAFNOSUPPORT; + rv = sock_create(addr_family, SOCK_STREAM, IPPROTO_TCP, &s); if (rv < 0) return rv; @@ -1805,9 +1814,25 @@ static int siw_listen_address(struct iw_cm_id *id, int backlog, siw_dbg(id->device, "setsockopt error: %d\n", rv); goto error; } - rv = s->ops->bind(s, laddr, addr_family == AF_INET ? - sizeof(struct sockaddr_in) : - sizeof(struct sockaddr_in6)); + if (addr_family == AF_INET) { + struct sockaddr_in *laddr = &to_sockaddr_in(id->local_addr); + + /* For wildcard addr, limit binding to current device only */ + if (ipv4_is_zeronet(laddr->sin_addr.s_addr)) + s->sk->sk_bound_dev_if = sdev->netdev->ifindex; + + rv = s->ops->bind(s, (struct sockaddr *)laddr, + sizeof(struct sockaddr_in)); + } else { + struct sockaddr_in6 *laddr = &to_sockaddr_in6(id->local_addr); + + /* For wildcard addr, limit binding to current device only */ + if (ipv6_addr_any(&laddr->sin6_addr)) + s->sk->sk_bound_dev_if = sdev->netdev->ifindex; + + rv = s->ops->bind(s, (struct sockaddr *)laddr, + sizeof(struct sockaddr_in6)); + } if (rv) { siw_dbg(id->device, "socket bind error: %d\n", rv); goto error; @@ -1866,7 +1891,7 @@ static int siw_listen_address(struct iw_cm_id *id, int backlog, list_add_tail(&cep->listenq, (struct list_head *)id->provider_data); cep->state = SIW_EPSTATE_LISTENING; - siw_dbg(id->device, "Listen at laddr %pISp\n", laddr); + siw_dbg(id->device, "Listen at laddr %pISp\n", &id->local_addr); return 0; @@ -1924,114 +1949,6 @@ static void siw_drop_listeners(struct iw_cm_id *id) } } -/* - * siw_create_listen - Create resources for a listener's IWCM ID @id - * - * Listens on the socket addresses id->local_addr and id->remote_addr. - * - * If the listener's @id provides a specific local IP address, at most one - * listening socket is created and associated with @id. - * - * If the listener's @id provides the wildcard (zero) local IP address, - * a separate listen is performed for each local IP address of the device - * by creating a listening socket and binding to that local IP address. - * - */ -int siw_create_listen(struct iw_cm_id *id, int backlog) -{ - struct net_device *dev = to_siw_dev(id->device)->netdev; - int rv = 0, listeners = 0; - - siw_dbg(id->device, "backlog %d\n", backlog); - - /* - * For each attached address of the interface, create a - * listening socket, if id->local_addr is the wildcard - * IP address or matches the IP address. - */ - if (id->local_addr.ss_family == AF_INET) { - struct in_device *in_dev = in_dev_get(dev); - struct sockaddr_in s_laddr, *s_raddr; - const struct in_ifaddr *ifa; - - if (!in_dev) { - rv = -ENODEV; - goto out; - } - memcpy(&s_laddr, &id->local_addr, sizeof(s_laddr)); - s_raddr = (struct sockaddr_in *)&id->remote_addr; - - siw_dbg(id->device, - "laddr %pI4:%d, raddr %pI4:%d\n", - &s_laddr.sin_addr, ntohs(s_laddr.sin_port), - &s_raddr->sin_addr, ntohs(s_raddr->sin_port)); - - rtnl_lock(); - in_dev_for_each_ifa_rtnl(ifa, in_dev) { - if (ipv4_is_zeronet(s_laddr.sin_addr.s_addr) || - s_laddr.sin_addr.s_addr == ifa->ifa_address) { - s_laddr.sin_addr.s_addr = ifa->ifa_address; - - rv = siw_listen_address(id, backlog, - (struct sockaddr *)&s_laddr, - AF_INET); - if (!rv) - listeners++; - } - } - rtnl_unlock(); - in_dev_put(in_dev); - } else if (id->local_addr.ss_family == AF_INET6) { - struct inet6_dev *in6_dev = in6_dev_get(dev); - struct inet6_ifaddr *ifp; - struct sockaddr_in6 *s_laddr = &to_sockaddr_in6(id->local_addr), - *s_raddr = &to_sockaddr_in6(id->remote_addr); - - if (!in6_dev) { - rv = -ENODEV; - goto out; - } - siw_dbg(id->device, - "laddr %pI6:%d, raddr %pI6:%d\n", - &s_laddr->sin6_addr, ntohs(s_laddr->sin6_port), - &s_raddr->sin6_addr, ntohs(s_raddr->sin6_port)); - - rtnl_lock(); - list_for_each_entry(ifp, &in6_dev->addr_list, if_list) { - if (ifp->flags & (IFA_F_TENTATIVE | IFA_F_DEPRECATED)) - continue; - if (ipv6_addr_any(&s_laddr->sin6_addr) || - ipv6_addr_equal(&s_laddr->sin6_addr, &ifp->addr)) { - struct sockaddr_in6 bind_addr = { - .sin6_family = AF_INET6, - .sin6_port = s_laddr->sin6_port, - .sin6_flowinfo = 0, - .sin6_addr = ifp->addr, - .sin6_scope_id = dev->ifindex }; - - rv = siw_listen_address(id, backlog, - (struct sockaddr *)&bind_addr, - AF_INET6); - if (!rv) - listeners++; - } - } - rtnl_unlock(); - in6_dev_put(in6_dev); - } else { - rv = -EAFNOSUPPORT; - } -out: - if (listeners) - rv = 0; - else if (!rv) - rv = -EINVAL; - - siw_dbg(id->device, "%s\n", rv ? "FAIL" : "OK"); - - return rv; -} - int siw_destroy_listen(struct iw_cm_id *id) { if (!id->provider_data) { From b40f1ae359f20cb10ff262f2deda59bec3457eaf Mon Sep 17 00:00:00 2001 From: Qiujun Huang Date: Sun, 8 Mar 2020 17:45:27 +0800 Subject: [PATCH 130/136] Bluetooth: RFCOMM: fix ODEBUG bug in rfcomm_dev_ioctl commit 71811cac8532b2387b3414f7cd8fe9e497482864 upstream. Needn't call 'rfcomm_dlc_put' here, because 'rfcomm_dlc_exists' didn't increase dlc->refcnt. Reported-by: syzbot+4496e82090657320efc6@syzkaller.appspotmail.com Signed-off-by: Qiujun Huang Suggested-by: Hillf Danton Signed-off-by: Marcel Holtmann Signed-off-by: Greg Kroah-Hartman --- net/bluetooth/rfcomm/tty.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c index 0c7d31c6c18c..a58584949a95 100644 --- a/net/bluetooth/rfcomm/tty.c +++ b/net/bluetooth/rfcomm/tty.c @@ -413,10 +413,8 @@ static int __rfcomm_create_dev(struct sock *sk, void __user *arg) dlc = rfcomm_dlc_exists(&req.src, &req.dst, req.channel); if (IS_ERR(dlc)) return PTR_ERR(dlc); - else if (dlc) { - rfcomm_dlc_put(dlc); + if (dlc) return -EBUSY; - } dlc = rfcomm_dlc_alloc(GFP_KERNEL); if (!dlc) return -ENOMEM; From d020ff5060a40918442dc7898090add16452afc9 Mon Sep 17 00:00:00 2001 From: Avihai Horon Date: Wed, 18 Mar 2020 12:17:41 +0200 Subject: [PATCH 131/136] RDMA/cm: Update num_paths in cma_resolve_iboe_route error flow commit 987914ab841e2ec281a35b54348ab109b4c0bb4e upstream. After a successful allocation of path_rec, num_paths is set to 1, but any error after such allocation will leave num_paths uncleared. This causes to de-referencing a NULL pointer later on. Hence, num_paths needs to be set back to 0 if such an error occurs. The following crash from syzkaller revealed it. kasan: CONFIG_KASAN_INLINE enabled kasan: GPF could be caused by NULL-ptr deref or user memory access general protection fault: 0000 [#1] SMP DEBUG_PAGEALLOC KASAN PTI CPU: 0 PID: 357 Comm: syz-executor060 Not tainted 4.18.0+ #311 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.11.0-0-g63451fca13-prebuilt.qemu-project.org 04/01/2014 RIP: 0010:ib_copy_path_rec_to_user+0x94/0x3e0 Code: f1 f1 f1 f1 c7 40 0c 00 00 f4 f4 65 48 8b 04 25 28 00 00 00 48 89 45 c8 31 c0 e8 d7 60 24 ff 48 8d 7b 4c 48 89 f8 48 c1 e8 03 <42> 0f b6 14 30 48 89 f8 83 e0 07 83 c0 03 38 d0 7c 08 84 d2 0f 85 RSP: 0018:ffff88006586f980 EFLAGS: 00010207 RAX: 0000000000000009 RBX: 0000000000000000 RCX: 1ffff1000d5fe475 RDX: ffff8800621e17c0 RSI: ffffffff820d45f9 RDI: 000000000000004c RBP: ffff88006586fa50 R08: ffffed000cb0df73 R09: ffffed000cb0df72 R10: ffff88006586fa70 R11: ffffed000cb0df73 R12: 1ffff1000cb0df30 R13: ffff88006586fae8 R14: dffffc0000000000 R15: ffff88006aff2200 FS: 00000000016fc880(0000) GS:ffff88006d000000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000020000040 CR3: 0000000063fec000 CR4: 00000000000006b0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: ? ib_copy_path_rec_from_user+0xcc0/0xcc0 ? __mutex_unlock_slowpath+0xfc/0x670 ? wait_for_completion+0x3b0/0x3b0 ? ucma_query_route+0x818/0xc60 ucma_query_route+0x818/0xc60 ? ucma_listen+0x1b0/0x1b0 ? sched_clock_cpu+0x18/0x1d0 ? sched_clock_cpu+0x18/0x1d0 ? ucma_listen+0x1b0/0x1b0 ? ucma_write+0x292/0x460 ucma_write+0x292/0x460 ? ucma_close_id+0x60/0x60 ? sched_clock_cpu+0x18/0x1d0 ? sched_clock_cpu+0x18/0x1d0 __vfs_write+0xf7/0x620 ? ucma_close_id+0x60/0x60 ? kernel_read+0x110/0x110 ? time_hardirqs_on+0x19/0x580 ? lock_acquire+0x18b/0x3a0 ? finish_task_switch+0xf3/0x5d0 ? _raw_spin_unlock_irq+0x29/0x40 ? _raw_spin_unlock_irq+0x29/0x40 ? finish_task_switch+0x1be/0x5d0 ? __switch_to_asm+0x34/0x70 ? __switch_to_asm+0x40/0x70 ? security_file_permission+0x172/0x1e0 vfs_write+0x192/0x460 ksys_write+0xc6/0x1a0 ? __ia32_sys_read+0xb0/0xb0 ? entry_SYSCALL_64_after_hwframe+0x3e/0xbe ? do_syscall_64+0x1d/0x470 do_syscall_64+0x9e/0x470 entry_SYSCALL_64_after_hwframe+0x49/0xbe Fixes: 3c86aa70bf67 ("RDMA/cm: Add RDMA CM support for IBoE devices") Link: https://lore.kernel.org/r/20200318101741.47211-1-leon@kernel.org Signed-off-by: Avihai Horon Reviewed-by: Maor Gottlieb Signed-off-by: Leon Romanovsky Signed-off-by: Jason Gunthorpe Signed-off-by: Greg Kroah-Hartman --- drivers/infiniband/core/cma.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index 7c34b716aff9..8f776b7de45e 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c @@ -2911,6 +2911,7 @@ static int cma_resolve_iboe_route(struct rdma_id_private *id_priv) err2: kfree(route->path_rec); route->path_rec = NULL; + route->num_paths = 0; err1: kfree(work); return ret; From d4083258db0463a733fa8da978e314c1c4b5d56c Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Mon, 9 Mar 2020 21:26:17 -0700 Subject: [PATCH 132/136] blk-mq: Keep set->nr_hw_queues and set->map[].nr_queues in sync commit 6e66b49392419f3fe134e1be583323ef75da1e4b upstream. blk_mq_map_queues() and multiple .map_queues() implementations expect that set->map[HCTX_TYPE_DEFAULT].nr_queues is set to the number of hardware queues. Hence set .nr_queues before calling these functions. This patch fixes the following kernel warning: WARNING: CPU: 0 PID: 2501 at include/linux/cpumask.h:137 Call Trace: blk_mq_run_hw_queue+0x19d/0x350 block/blk-mq.c:1508 blk_mq_run_hw_queues+0x112/0x1a0 block/blk-mq.c:1525 blk_mq_requeue_work+0x502/0x780 block/blk-mq.c:775 process_one_work+0x9af/0x1740 kernel/workqueue.c:2269 worker_thread+0x98/0xe40 kernel/workqueue.c:2415 kthread+0x361/0x430 kernel/kthread.c:255 Fixes: ed76e329d74a ("blk-mq: abstract out queue map") # v5.0 Reported-by: syzbot+d44e1b26ce5c3e77458d@syzkaller.appspotmail.com Signed-off-by: Bart Van Assche Reviewed-by: Ming Lei Reviewed-by: Chaitanya Kulkarni Cc: Johannes Thumshirn Cc: Hannes Reinecke Cc: Ming Lei Cc: Christoph Hellwig Signed-off-by: Jens Axboe Signed-off-by: Greg Kroah-Hartman --- block/blk-mq.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/block/blk-mq.c b/block/blk-mq.c index 3c1abab1fdf5..a8c1a45cedde 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -3007,6 +3007,14 @@ static int blk_mq_alloc_rq_maps(struct blk_mq_tag_set *set) static int blk_mq_update_queue_map(struct blk_mq_tag_set *set) { + /* + * blk_mq_map_queues() and multiple .map_queues() implementations + * expect that set->map[HCTX_TYPE_DEFAULT].nr_queues is set to the + * number of hardware queues. + */ + if (set->nr_maps == 1) + set->map[HCTX_TYPE_DEFAULT].nr_queues = set->nr_hw_queues; + if (set->ops->map_queues && !is_kdump_kernel()) { int i; From 047affa0ef0026b25e90adad7e2f8f99e11da654 Mon Sep 17 00:00:00 2001 From: Qiujun Huang Date: Sun, 29 Mar 2020 16:56:47 +0800 Subject: [PATCH 133/136] fbcon: fix null-ptr-deref in fbcon_switch commit b139f8b00db4a8ea75a4174346eafa48041aa489 upstream. Set logo_shown to FBCON_LOGO_CANSHOW when the vc was deallocated. syzkaller report: https://lkml.org/lkml/2020/3/27/403 general protection fault, probably for non-canonical address 0xdffffc000000006c: 0000 [#1] SMP KASAN KASAN: null-ptr-deref in range [0x0000000000000360-0x0000000000000367] RIP: 0010:fbcon_switch+0x28f/0x1740 drivers/video/fbdev/core/fbcon.c:2260 Call Trace: redraw_screen+0x2a8/0x770 drivers/tty/vt/vt.c:1008 vc_do_resize+0xfe7/0x1360 drivers/tty/vt/vt.c:1295 fbcon_init+0x1221/0x1ab0 drivers/video/fbdev/core/fbcon.c:1219 visual_init+0x305/0x5c0 drivers/tty/vt/vt.c:1062 do_bind_con_driver+0x536/0x890 drivers/tty/vt/vt.c:3542 do_take_over_console+0x453/0x5b0 drivers/tty/vt/vt.c:4122 do_fbcon_takeover+0x10b/0x210 drivers/video/fbdev/core/fbcon.c:588 fbcon_fb_registered+0x26b/0x340 drivers/video/fbdev/core/fbcon.c:3259 do_register_framebuffer drivers/video/fbdev/core/fbmem.c:1664 [inline] register_framebuffer+0x56e/0x980 drivers/video/fbdev/core/fbmem.c:1832 dlfb_usb_probe.cold+0x1743/0x1ba3 drivers/video/fbdev/udlfb.c:1735 usb_probe_interface+0x310/0x800 drivers/usb/core/driver.c:374 accessing vc_cons[logo_shown].d->vc_top causes the bug. Reported-by: syzbot+732528bae351682f1f27@syzkaller.appspotmail.com Signed-off-by: Qiujun Huang Acked-by: Sam Ravnborg Cc: stable@vger.kernel.org Signed-off-by: Daniel Vetter Link: https://patchwork.freedesktop.org/patch/msgid/20200329085647.25133-1-hqjagain@gmail.com Signed-off-by: Greg Kroah-Hartman --- drivers/video/fbdev/core/fbcon.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c index c9235a2f42f8..22070cfea1d0 100644 --- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c @@ -1276,6 +1276,9 @@ static void fbcon_deinit(struct vc_data *vc) if (!con_is_bound(&fb_con)) fbcon_exit(); + if (vc->vc_num == logo_shown) + logo_shown = FBCON_LOGO_CANSHOW; + return; } From 04ad505eed58f442b8d55004df10456ab2f0ec08 Mon Sep 17 00:00:00 2001 From: Sultan Alsawaf Date: Tue, 7 Apr 2020 13:32:22 -0700 Subject: [PATCH 134/136] drm/i915: Fix ref->mutex deadlock in i915_active_wait() The following deadlock exists in i915_active_wait() due to a double lock on ref->mutex (call chain listed in order from top to bottom): i915_active_wait(); mutex_lock_interruptible(&ref->mutex); <-- ref->mutex first acquired i915_active_request_retire(); node_retire(); active_retire(); mutex_lock_nested(&ref->mutex, SINGLE_DEPTH_NESTING); <-- DEADLOCK Fix the deadlock by skipping the second ref->mutex lock when active_retire() is called through i915_active_request_retire(). Note that this bug only affects 5.4 and has since been fixed in 5.5. Normally, a backport of the fix from 5.5 would be in order, but the patch set that fixes this deadlock involves massive changes that are neither feasible nor desirable for backporting [1][2][3]. Therefore, this small patch was made to address the deadlock specifically for 5.4. [1] 274cbf20fd10 ("drm/i915: Push the i915_active.retire into a worker") [2] 093b92287363 ("drm/i915: Split i915_active.mutex into an irq-safe spinlock for the rbtree") [3] 750bde2fd4ff ("drm/i915: Serialise with remote retirement") Fixes: 12c255b5dad1 ("drm/i915: Provide an i915_active.acquire callback") Cc: # 5.4.x Signed-off-by: Sultan Alsawaf Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/i915/i915_active.c | 29 +++++++++++++++++++---------- drivers/gpu/drm/i915/i915_active.h | 4 ++-- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_active.c b/drivers/gpu/drm/i915/i915_active.c index 48e16ad93bbd..51dc8753b527 100644 --- a/drivers/gpu/drm/i915/i915_active.c +++ b/drivers/gpu/drm/i915/i915_active.c @@ -121,7 +121,7 @@ static inline void debug_active_assert(struct i915_active *ref) { } #endif static void -__active_retire(struct i915_active *ref) +__active_retire(struct i915_active *ref, bool lock) { struct active_node *it, *n; struct rb_root root; @@ -138,7 +138,8 @@ __active_retire(struct i915_active *ref) retire = true; } - mutex_unlock(&ref->mutex); + if (likely(lock)) + mutex_unlock(&ref->mutex); if (!retire) return; @@ -153,21 +154,28 @@ __active_retire(struct i915_active *ref) } static void -active_retire(struct i915_active *ref) +active_retire(struct i915_active *ref, bool lock) { GEM_BUG_ON(!atomic_read(&ref->count)); if (atomic_add_unless(&ref->count, -1, 1)) return; /* One active may be flushed from inside the acquire of another */ - mutex_lock_nested(&ref->mutex, SINGLE_DEPTH_NESTING); - __active_retire(ref); + if (likely(lock)) + mutex_lock_nested(&ref->mutex, SINGLE_DEPTH_NESTING); + __active_retire(ref, lock); } static void node_retire(struct i915_active_request *base, struct i915_request *rq) { - active_retire(node_from_active(base)->ref); + active_retire(node_from_active(base)->ref, true); +} + +static void +node_retire_nolock(struct i915_active_request *base, struct i915_request *rq) +{ + active_retire(node_from_active(base)->ref, false); } static struct i915_active_request * @@ -364,7 +372,7 @@ int i915_active_acquire(struct i915_active *ref) void i915_active_release(struct i915_active *ref) { debug_active_assert(ref); - active_retire(ref); + active_retire(ref, true); } static void __active_ungrab(struct i915_active *ref) @@ -391,7 +399,7 @@ void i915_active_ungrab(struct i915_active *ref) { GEM_BUG_ON(!test_bit(I915_ACTIVE_GRAB_BIT, &ref->flags)); - active_retire(ref); + active_retire(ref, true); __active_ungrab(ref); } @@ -421,12 +429,13 @@ int i915_active_wait(struct i915_active *ref) break; } - err = i915_active_request_retire(&it->base, BKL(ref)); + err = i915_active_request_retire(&it->base, BKL(ref), + node_retire_nolock); if (err) break; } - __active_retire(ref); + __active_retire(ref, true); if (err) return err; diff --git a/drivers/gpu/drm/i915/i915_active.h b/drivers/gpu/drm/i915/i915_active.h index f95058f99057..0ad7ef60d15f 100644 --- a/drivers/gpu/drm/i915/i915_active.h +++ b/drivers/gpu/drm/i915/i915_active.h @@ -309,7 +309,7 @@ i915_active_request_isset(const struct i915_active_request *active) */ static inline int __must_check i915_active_request_retire(struct i915_active_request *active, - struct mutex *mutex) + struct mutex *mutex, i915_active_retire_fn retire) { struct i915_request *request; long ret; @@ -327,7 +327,7 @@ i915_active_request_retire(struct i915_active_request *active, list_del_init(&active->link); RCU_INIT_POINTER(active->request, NULL); - active->retire(active, request); + retire(active, request); return 0; } From ad5676629a126afeb8f3aa9d08eaad663cf0e8e2 Mon Sep 17 00:00:00 2001 From: Lu Baolu Date: Wed, 15 Jan 2020 11:03:58 +0800 Subject: [PATCH 135/136] iommu/vt-d: Allow devices with RMRRs to use identity domain commit 9235cb13d7d17baba0b3a9277381258361e95c16 upstream. Since commit ea2447f700cab ("intel-iommu: Prevent devices with RMRRs from being placed into SI Domain"), the Intel IOMMU driver doesn't allow any devices with RMRR locked to use the identity domain. This was added to to fix the issue where the RMRR info for devices being placed in and out of the identity domain gets lost. This identity maps all RMRRs when setting up the identity domain, so that devices with RMRRs could also use it. Signed-off-by: Lu Baolu Signed-off-by: Joerg Roedel Cc: Alan Stern Cc: John Donnelly Signed-off-by: Greg Kroah-Hartman --- drivers/iommu/intel-iommu.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c index 9d47b227e557..0d922eeae357 100644 --- a/drivers/iommu/intel-iommu.c +++ b/drivers/iommu/intel-iommu.c @@ -2762,10 +2762,8 @@ static int __init si_domain_init(int hw) } /* - * Normally we use DMA domains for devices which have RMRRs. But we - * loose this requirement for graphic and usb devices. Identity map - * the RMRRs for graphic and USB devices so that they could use the - * si_domain. + * Identity map the RMRRs so that devices with RMRRs could also use + * the si_domain. */ for_each_rmrr_units(rmrr) { for_each_active_dev_scope(rmrr->devices, rmrr->devices_cnt, @@ -2773,9 +2771,6 @@ static int __init si_domain_init(int hw) unsigned long long start = rmrr->base_address; unsigned long long end = rmrr->end_address; - if (device_is_rmrr_locked(dev)) - continue; - if (WARN_ON(end < start || end >> agaw_to_width(si_domain->agaw))) continue; @@ -2914,9 +2909,6 @@ static int device_def_domain_type(struct device *dev) if (dev_is_pci(dev)) { struct pci_dev *pdev = to_pci_dev(dev); - if (device_is_rmrr_locked(dev)) - return IOMMU_DOMAIN_DMA; - /* * Prevent any device marked as untrusted from getting * placed into the statically identity mapping domain. @@ -2954,9 +2946,6 @@ static int device_def_domain_type(struct device *dev) return IOMMU_DOMAIN_DMA; } else if (pci_pcie_type(pdev) == PCI_EXP_TYPE_PCI_BRIDGE) return IOMMU_DOMAIN_DMA; - } else { - if (device_has_rmrr(dev)) - return IOMMU_DOMAIN_DMA; } return (iommu_identity_mapping & IDENTMAP_ALL) ? From bc844d58f697dff3ded4b410094ee89f5cedc04c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 13 Apr 2020 10:48:18 +0200 Subject: [PATCH 136/136] Linux 5.4.32 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index af28533919cc..c2d5975844d9 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 31 +SUBLEVEL = 32 EXTRAVERSION = NAME = Kleptomaniac Octopus