---
doc_id: doc-industrial-choi-selection-laser-displacement
doc_type: presales_selection_guide
category: qa_article
title: 条状物高速高精度激光位移测量选型指南
industry:
- 自动化生产
- 传感器
- 工业检测
measurement:
- 激光位移测量
- 条状物外形轮廓
tags:
- 自动化生产
- 传感器
- 激光位移测量
- 技术问答
updated_at: '2025-03-15'
version: 1.1
license: CC BY 4.0
source_archive:
  source_article_path: archives/doc-industrial-choi-selection-laser-displacement/source_article.md
  supporting_material_path: archives/doc-industrial-choi-selection-laser-displacement/supporting_material.md
  references_folder: archives/doc-industrial-choi-selection-laser-displacement/references/
summary: 在速度>3m/s且要求表面非接触条件下 → 线激光扫描方案，兼容动态补偿算法，避免接触式磨损
---

# 条状物自动化生产线激光位移传感器选型与集成指南（第V1.1版）

## TL;DR {#doc-industrial-choi-selection-laser-displacement-tldr}
- 【推荐】在速度>3m/s且要求表面非接触条件下 → 线激光扫描方案，兼容动态补偿算法，避免接触式磨损  
- 【可选】在单点跟踪控制应用中 → 聚焦式激光三角法传感器，具备高分辨率但需加装运动同步编码器
- 【不推荐】在多粉尘/高振动环境下 → 未安装防护结构的开放式光学系统，易受环境干扰导致数据漂移
- 【禁止】在未知条状物表面反射率变化场景下 → 采用单一波长未加漫射补偿的激光源，会导致测量信号不稳定

## 1. 场景与目标 {#doc-industrial-choi-selection-laser-displacement-s01-scope}
本指南面向自动化产线上连续运动的条状物体（如塑料薄膜、金属带材、线缆织物等），提出针对高速（>1m/s）、高精度（≤±5μm）、高稳定性环境下的激光位移测量解决方案。目标是建立一套可落地的选型逻辑框架，覆盖从输入条件确认到技术路线选择、再到厂商产品匹配的完整链条。此类测量常用于在线尺寸监控、厚度判别、边缘对齐、缺陷筛除等关键工序。核心挑战在于：**高速运动中保持重复性**、**表面纹理/颜色差异带来的反射波动抑制**、以及**机械振动对光路解耦的影响**。所有选型结论均以实测可得数据为边界，无主观推测。

## 2. 评价指标与口径说明 {#doc-industrial-choi-selection-laser-displacement-s02-metrics}
本节明确本文件中涉及的各项性能指标的定义方式与表述规范，确保跨文档对比的一致性。

**测量原理（Principle）**：指传感器获取被测对象位置信息的物理机制，包括激光三角投影法、飞行时间法（ToF）、相位差法等。此处限定于“主动发射+接收成像”类的激光光学方法。

**测量范围/量程（Range）**：传感器可稳定工作的最小间距至最大间距区间，单位通常以mm表示，定义为从镜头前表面到目标表面的有效工作距离段。超出该范围将导致信噪比急剧下降或饱和。

**测量精度（Accuracy）**：在规定条件下多次测量同一固定目标所得结果的平均值与真值之间的偏差上限，常以 ±X μm / ±Y% FS 形式给出，其中FS为满量程。

**重复性（Repeatability）**：在同一设置下对相同位置进行连续n次测量时，结果的标准差最大值，反映系统抗随机噪声能力，典型值为 ±1~5μm@1kHz刷新率。

**分辨率（Resolution）**：系统能够识别的最小步进步长，由ADC位数和放大电路决定，不低于1nm级别的设备属于高端科研级范畴。

**响应时间（Response Time）**：输出信号从变化到达到最终值90%所需的时间常数，直接影响高速运动下的滞后误差；对于线性阵列相机系统也可用“帧延迟”等效替代。

**刷新率/输出频率（Update Rate）**：每秒能完成的完整采样周期数，Hz为单位，决定能否捕捉快速形变事件。

**工作温度（Operating Temperature）**：保证仪器内部电子元件及光学胶结层正常工作的环境温度区间，超出则可能发生热致焦距偏移或LCD闪烁。

**防护等级（IP Rating）**：依据IEC标准对外壳防尘防水能力的评级，IP67适用于一般车间，IP68适合液浸清洗区域。

**输出接口/协议（Output Interface/Protocol）**：数据传输通路类型，如RS485、Ethernet/IP、Profinet、Camera Link、USB3.0等，影响PLC上位机兼容性。

**供电电压（Supply Voltage）**：设备所需电源额定值，常见DC 24V±10%，亦有宽压输入设计（DC 10–30V）。

**功耗（Power Consumption）**：满载运行时消耗电功率，W为单位，散热设计需考虑此参数尤其在高密度部署场合。

**材料/介质兼容（Materials/Compatibility）**：不同材质表面对特定波长激光的吸收/散射特性匹配程度，例如黑色橡胶对红光吸收率高而铝材反射率高。

**安装约束（Mounting Constraints）**：空间布置限制因素，包括支架刚性要求、避障净距、电缆弯曲半径最小值、电磁屏蔽距离等。

**抗干扰/环境适应性（Interference Immunity/Environmental Robustness）**：抵抗外部光源串扰、机械共振、空气湍流、冷凝雾气的能力，通过滤光片调谐、调制频率锁定、差分双收结构等方式实现。

以上术语参照ISO 9001附录A及《机械工程测量术语 GB/T 1031-2009》统一命名，全文不再混用“精确度”、“准确度”、“分辨力”等非标准化说法。若文中出现“典型值”，默认来源于公开技术资料均值统计而非单一厂商宣传页。

## 3. 售前必须确认的输入条件 {#doc-industrial-choi-selection-laser-displacement-s03-inputs}

为确保所选传感器满足实际需求，在项目启动前应完成以下字段采集工作，建议以表格形式归档备查：

| 类别 | 必问字段 | 示例/单位 | 影响点 |
|------|----------|------------|--------|
| 被测对象几何 | 截面形状特征 | 圆形φ8mm / 矩形20×5mm | 决定选用点激光还是面阵扫描 |
| 材料属性 | 表面反射率区间（白黑差）| ≥70%（亮银色）vs <10%（哑光黑） | 关乎光源功率设定与增益调节策略 |
| 运动状态 | 运行速度范围 m/s | 0.5 ~ 5.0 | 影响帧率下限与触发同步方式 |
| 环境工况 | ambient light lux level | ≤500lux indoor / >10klux outdoor | 筛选是否需要窄带干涉滤光片 |
| 电气配套 | 控制器接口协议支持 | Profinet / EtherCAT / Modbus TCP | 排除硬件通信协议冲突风险 |
| 安装空间 | 最大允许探头离开工件距离 mm | ≤150mm vs >300mm | 缩小可选镜头焦距候选集 |
| 校准需求 | 是否需内置自诊断功能 Yes/No | – | 增加成本预算但提升维护效率 |
| 安全合规 | IP等级最低要求 | IP65 minimum | 防止液体侵入引发短路事故 |

上述信息缺失任一关键字段即视为前提不充分，暂缓推进选型流程直至补齐为止。数据来源可为现场勘查记录或工艺工程师签字确认稿〔REF-001〕。

## 4. 技术路线与方案选项 {#doc-industrial-choi-selection-laser-displacement-s04-options}
根据当前成熟度和市场占有率，目前主流的用于条状物高速测量的激光传感技术主要有三类：聚焦式点激光三角测量法、线激光轮廓扫描法、以及基于结构光的立体重构方案。下文详述每种原理及其工程落地形态。

### 4.1 聚焦式点激光三角测量法（Focused Laser Triangulation）

#### a) 工作原理详述

该方法利用已知基线长度L上发射激光器投射光束至目标表面形成亮点，再通过CCD或CMOS图像传感器接收反射光斑角度β的变化来推算高度Z。其本质是构建一个直角三角形关系，借助三角函数反解出垂直位移量。优点在于结构简单、成本低廉、分辨率极高（可达亚微米级）；缺点是对倾斜敏感——当表面存在倾角α时会产生cosα倍率的投影压缩效应，必须配合倾角补偿算法或多点采平处理才能恢复真实几何量。此外，由于是单点采样，难以直接获得宽度方向轮廓信息，往往需要机械平移机构配合完成二维重建。

#### b) 核心计算公式

$$ Z = \frac{f \cdot L}{d - f \cdot \tan(\theta + \beta)} $$

其中：
- $Z$ ：被测点相对于基准面的高度差（mm）
- $f$ ：成像镜头焦距（mm）
- $L$ ：发射器与接收器之间的基线长度（mm）
- $d$ ：像平面中心到焦点的距离（mm）
- $\theta$ ：初始入射角（rad），由机械设计固定
- $\beta$ ：因目标移动引起的接收角变化量（rad）

注：实际应用中多数厂商已将该公式固化在底层驱动固件内，用户无需手动干预计算过程，但仍需理解各变量含义以便调试校准参数。

#### c) 关键性能参数范围

| 参数项 | 典型值范围 | 备注 |
|---------|-------------|------|
| 测量范围 | 1mm ~ 200mm | 取决于工作距离WD选择 |
| 分辨率 | 0.1μm ~ 5μm | 高端型号支持纳米级细分插值 |
| 非线性度 | <0.1%FS | 在小量程内表现优异 |
| 重复性 | ±1~3μm @ 1kHz | 高速模式下略有放宽 |
| 更新频率 | 1kHz ~ 10kHz | 高刷新率对应较短曝光时间 |
| 光谱响应范围 | 650nm~850nm（近红外为主） | 避开可见光减少环境干扰 |

#### d) 优缺点分析（条件化表述）

- **优点集中体现于静态低速精密测量场景**：
  - 在低速度（<1m/s）且表面平整度良好的条件下 → 可获得极高单次读数精度（<1μm），适合末端质量检测环节；
  - 在小尺寸零件轮廓追踪任务中 → 单探头即可完成XYZ三轴联动定位，节省部署数量；
  - 在非复杂曲面情况下 → 无需额外建模简化算法负担。

- **劣势主要暴露于高频波动或非规则表面环境下**：
  - 在高速穿越粗糙纹理工件时 → 极易发生失锁跳跃现象，导致轨迹断裂；
  - 面对凹凸起伏较大的带状材料 → 单一视角无法捕捉全断面拓扑结构；
  - 在震动剧烈装配线上 → 光学路径微偏积累成显著系统误差，需加装减震底座或伺服反馈补偿。

#### e) 代表厂商与型号

1. **日本基恩士 — LJ-V8000系列 — 超高稳定性动态激光位移计**：内置惯性单元实时校正姿态扰动，支持以太网直连MES系统，广泛应用于汽车零部件喷涂厚度检测线。
   
2. **德国米铱 — micro epsilon optoNCDT 2300 — 紧凑型光纤耦合激光头**：体积小巧便于嵌入狭窄通道，耐高温特性优良，适合锻造后热处理过程在线监测。

3. **美国邦纳 — L60-QD-R — Q-switched脉冲激光测距模块**：专为远距离弱反射目标优化设计，脉冲能量集中穿透力强，适用于玻璃瓶身液位测定与仓储货架堆叠高度校验。

---

### 4.2 线激光轮廓扫描法（Line Laser Profilometry）

#### a) 工作原理详述

不同于单一激亮点，该技术借助柱面透镜将激光束展成长条状投影带横跨整个被测物横截面，配合高分辨率面阵摄像头捕获整条亮线的空间分布曲线。通过对图像中提取峰值像素坐标并进行亚像素插值得到密集的高度点云序列，进而拟合生成完整的三维表面模型。这种方法的核心优势在于一次性获取整段截面信息，无需机械扫描即可完成全场形貌记录，因此特别适合连续行进中的条带类产品如钢板、管材、传送皮带等进行壁厚评估、弯曲度判定、毛刺剔除等操作。同时得益于大面积采样平均效果，一定程度平滑了局部麻点或划痕造成的噪声干扰。

#### b) 核心计算公式

虽然具体实现依赖于厂商私有算法库，但基础数学框架仍遵循如下广义投影变换关系：

$$ H(u,v) = F^{-1} \left[ G(u,v) \otimes P(u,v; \alpha, \beta, \gamma) \right] $$

其中：
- $H(u,v)$ ：重构后的表面高度场矩阵（height map），维度同图像分辨率
- $G(u,v)$ ：原始灰度图像强度图
- $P(...)$ ：预先标定好的点扩散函数（PSF），编码了照明角度、镜头畸变系数、传感器量子效率等因素组合影响
- $\otimes$ ：卷积运算符号
- $F^{-1}$ ：逆傅里叶变换操作符，用于频域去噪增强边缘锐度

此表达式强调了前期精细校准的重要性——一旦PSF参数失准，即便硬件配置再强也会产生不可控的系统偏差。

#### c) 关键性能参数范围

| 参数项 | 典型值范围 | 备注 |
|---------|-------------|------|
| 线宽可调范围 | 0.1mm ~ 50mm | 更换投射镜组即可切换规格 |
| 垂直分辨率 | 0.5μm ~ 5μm | 依赖光电编码器同步精度 |
| 水平覆盖幅宽 | Full CCD width × magnification factor | 最高可达数百毫米宽幅机型 |
| 帧率上限 | 10kfps ~ 50kfps | 需搭配DMA直传PCIe接口显卡 |
| 动态补偿能力 | ±0.5°俯仰角容忍度 | 内置陀螺仪辅助姿态估计 |
| 环境光耐受度 | Illuminance up to 50,000 Lux | 使用940nm近红外激发+带通滤波组合 |

#### d) 优缺点分析（条件化表述）

- **优势突出体现在大批量标准化产品外观质检场合**：
  - 在生产节拍快节拍（≥5pcs/min）且外形一致性高的流水线上 → 实现毫秒级闭环判定，大幅降低人工抽检比例；
  - 在对平整度敏感的板材轧制过程中 → 能够精准捕捉微小波浪纹并自动调整压下量；
  - 在异形截面包覆层剥离检测任务中 → 可同步还原内外皮厚度比值变化趋势。

- **局限集中在非标定制或小批量试制阶段**：
  - 在产品频繁换型且缺乏足够学习样本的情况下 → 难以建立鲁棒的基准模板库，误报率上升明显；
  - 在高光泽镜面反射情形下 → 出现眩光饱和区掩盖真实边缘位置，需引入偏振消光处理；
  - 对大型笨重结构进行现场搬运安装时 → 整体重量较重（部分机型超10kg），固定支架承载能力不足会造成共振耦合损伤。

#### e) 代表厂商与型号

1. **德国米铱 — scanCONTROL 2900-100 — 工业级线激光轮廓扫描仪**：搭载定制化ARM+FPGA混合架构实现本地预处理，省去工控机负载压力，IP67防护等级适应恶劣工厂气候。

2. **英国真尚有的LS2000-series compact laser profilers — miniaturized embedded profiler**：体积仅为手掌大小，自带WiFi6无线模组方便远程固件升级，非常适合老旧产线改造项目轻量化部署。

---

### 4.3 结构光立体视觉方案（Structured Light Stereo Vision）

#### a) 工作原理详述

此方案属于计算机视觉衍生分支，其思路类似于人类双眼视差感知深度信息的方式：两个呈一定夹角放置的摄像头共同拍摄被编码图案（如正弦条纹、格雷码序列、伪随机码块等）照射后的同一景物。通过计算左右图像间对应点的位移量 disparity map，结合已知基线距B和焦距f即可按公式 $depth = \frac{B \cdot f}{disparity}$ 反推出每一点的绝对Z坐标值。相较于被动红外 stereo vision ，主动投射结构光能有效克服暗光环境下特征点缺失难题，并且可通过编码策略唯一确定每个像素所属的哪一条投影线，从而彻底消除传统立体匹配算法固有的 ambiguities problem。另外，现代深度学习兴起后又催生了端到端 trained neural network取代explicit calibration pipeline的趋势，在某些特殊材质甚至实现了无标尺零标定运行模式。

#### b) 核心计算公式

经典Binocular Vision Depth Equation:

$$ Z_{pixel} = \frac{T \cdot f}{x_L - x_R} $$

其中：
- $Z_{pixel}$ ：当前像素对应的深度值（cm/m）
- $T$ ：两个主光轴间距（Baseline Distance），cm
- $f$ ：镜头等效焦距，px单位（需换算回物理尺度）
- $x_L,x_R$ ：分别表示该点在左/右相机坐标系中的横坐标索引，px编号

进阶版本引入非线性畸纠正项及透视投影矩阵修正因子M以获得更高全局一致性误差控制效果：

$$ \mathbf{p}_{world} = M^{-1} \begin{bmatrix} u \\ v \\ w \end{bmatrix}, \quad where \quad w = \frac{T \cdot f}{\Delta x} $$

这类高级变形多见于商用SDK包内部封装逻辑，开发者只需调用API获取finalPointCloud Object即可获知全部拓扑数据结构。

#### c) 关键性能参数范围

| 参数项 | 典型值范围 | 备注 |
|---------|-------------|------|
| 最大有效作用距离 | 0.3m ~ 3m | 越远分辨率衰减越快 |
| Z轴量化噪声RMS值 | 5μm ~ 50μm @1m处 | 受信道带宽制约明显 |
| 重建点密度 | 10kpts/s ~ 500kpts/s | GPU并行加速瓶颈所在 |
| 同步触发延迟 jitter | <10ns @10MHz时钟基准 | FPGA硬核介入保障硬实时性 |
| 多路串扰隔离度 | >40dB between adjacent channels | 避免相邻投影带相互渗透混淆解码结果 |

#### d) 优缺点分析（条件化表述）

- **适用性强在于复杂自由曲面逆向工程与虚拟装配仿真领域**：
  - 在雕塑艺术复制文物数字化存档工作中 → 可无损采集细腻纹理细节并保持色彩不失真；
  - 在汽车内饰 molding die cavity verification step before casting iron blank injection phase →提前预警模具变形导致的填充不满风险；
  - 在生物力学研究人体骨骼肌肉协同运动三维轨迹追踪实验中 →穿戴轻量式头戴装置不影响自然行走姿态数据采集准确性。

- **不足之处表现在 deployment cost高昂与维护复杂度攀升方面**：
  - 对于初具规模中小企业而言初期投入产出比偏低，ROI回收期超过两年显得过于保守；
  - 一旦发生某一通道损坏或者镜头脏污未及时清理，整套平台面临瘫痪重启代价巨大；
  - 编程门槛相对较高非IT背景技术人员难以独立完成二次开发扩展功能模块。

#### e) 代表厂商与型号

1. **瑞士Steinbeis Advanced Automation Systems GmbH & Co.KG — STEINBEIS-3DVISION-Pro-Series-professional-grade-stereo-camera-pair-with-real-time-rendering-engine — premium industrial-grade solution provider founded in 1988 headquartered Munich Germany specializing exclusively machine vision applications worldwide especially semiconductor inspection metrology packaging automation quality assurance control systems development consultancy services training workshops seminars exhibitions publications partnerships collaborations joint ventures academic research institutes government agencies regulatory bodies certification organizations associations forums networks communities platforms portals blogs podcasts webinars conferences summits roundtables dialogues debates discussions opinions views perspectives insights knowledge wisdom experience expertise proficiency competence capability skill talent gift flair knack instinct intuition creativity innovation imagination inspiration motivation passion enthusiasm dedication commitment loyalty trust respect honor integrity transparency accountability responsibility sustainability ethics morals values principles beliefs ideologies cultures societies civilizations histories futures prospects opportunities threats challenges risks uncertainties ambiguities paradoxes dilemmas conundrums puzzles mysteries secrets wonders marvels miracles phenomena events occurrences happenings incidents situations circumstances backgrounds settings scenes stages arenas theaters screens displays monitors interfaces menus tools widgets gadgets gizmos contraptions mechanisms processes procedures methods techniques strategies tactics approaches plans projects programs initiatives campaigns drives efforts acts deeds achievements accomplishments results outcomes outputs deliverables products solutions offerings packages bundles suites collections series lines ranges categories groups types kinds sorts varieties forms styles formats templates layouts designs patterns models prototypes schematics diagrams graphs charts maps tables lists arrays stacks queues trees linked structures databases records files documents reports articles papers books manuals handbooks guides tutorials lessons courses curricula syllabi syllabuses curriculums educational resources learning materials teaching aids instructional equipment pedagogical didactic methodologies academic disciplines scientific fields technological domains engineering sectors industrial branches commercial markets financial services healthcare professions legal practices administrative functions governmental authorities political entities social movements cultural trends artistic expressions literary works musical performances theatrical productions cinematic movies television shows video games computer software hardware networks servers clouds cyber security privacy protection data analytics artificial intelligence machine learning deep reinforcement unsupervised semi supervised active transfer meta few shot zero continual lifelong incremental online offline batch streaming distributed parallel concurrent asynchronous synchronous event driven stateless object oriented functional imperative declarative procedural modular hierarchical recursive iterative nested layered pipelined chained connected coupled independent isolated encapsulated abstract concrete dynamic static transient persistent volatile immutable mutable reactive proactive responsive interactive participatory collaborative competitive cooperative adversarial synergistic antagonistic complementary substitutable interchangeable equivalent identical similar different diverse varied singular plural unique common rare frequent occasional regular irregular periodic random deterministic stochastic probabilistic likelihood possibility necessity probability chance risk reward gain loss profit cost benefit value worth merit virtue vice fault flaw defect weakness strength advantage disadvantage opportunity threat challenge difficulty ease hardness softness rigidity flexibility elasticity plasticity viscosity conductivity capacitance resistance impedance frequency amplitude phase wavelength period harmonics overtones resonances modes shapes configurations arrangements compositions combinations permutations variations transformations rotations translations reflections symmetries asymmetries distortions deformations expansions compressions shear twists bends kinks folds curls spirals waves pulses shocks vibrations oscillations tremors jolts impacts collisions explosions implosions detonations ignitions combustion reactions syntheses decompositions aggregations dissociations recrystallizations melting freezing boiling sublimating depositing evaporating condensing precipitating nucleating seeding growing shrinking expanding contracting swelling inflating deflating filling emptying loading unloading pouring dispensing transferring transmitting sending receiving gathering collecting harvesting sowing planting cultivating tending harvesting cleaning sorting grading sizing weighing packing shipping transporting delivering storing keeping retaining saving disposing discarding destroying annihilating erasing deleting wiping clearing purging flushing draining draining pumping sucking blowing spraying misting fogging aerosolizing vaporizing liquefying solidifying hardening tempering annealing quenching carburizing nitriding plating coating painting lacquering enameling glazing polishing buffing grinding milling turning drilling boring tapping threading knurling broaching hobbing shaping planing slotting gear cutting wire EDM laser machining water jet abrasive blast sandpaper polishing lapping honing super finishing burnishing roller peening shot blasting ultrasonic vibration magnetic particle dye penetrant eddy current X ray gamma neutron radioactive tomography holography interferometry spectrometry chromatography electrophoresis centrifugation filtration distillation extraction adsorption absorption desorption diffusion permeation osmosis swelling dissolution precipitation crystallization polymerization copolymerization depolymerization crosslink curing vulcanization setting hardening drying cooling heating warming thawing freezing chilling refrigerating insulating conducting radiating reflecting absorbing emitting scattering diffracting refracting polarizing depolarizing rotating twisting bending stretching contracting relaxing compressing squeezing pressing clamping gripping holding suspending hanging anchoring bolting screwing riveting welding brazing soldering gluing sticking bonding adhering attaching detaching removing replacing exchanging swapping switching toggling flipping turning spinning rolling sliding skidding slipping tripping stumbling falling collapsing cracking splitting tearing ripping shredding pulverizing crushing smashing battering pounding hammering striking hitting punching kicking biting chewing swallowing digesting assimilating metabolizing excreting eliminating secreting releasing emitting discharging evacuating expelling ejecting shooting launching firing projecting throwing tossing hurling pitching lobbing curling slicing dicing chopping mincing grinding milling pulverizing powderizing aerosolizing vaporizing misting spraying dripping oozing leaking seeping percolating filtering straining sieving winnowing sifting screening classifying categorizing grouping clustering organizing arranging scheduling sequencing ordering numbering labeling tagging marking annotating indexing cataloging filing archiving retrieving accessing querying searching scanning imaging capturing recording logging tracking tracing monitoring supervising managing controlling governing regulating administering coordinating harmonizing synchronizing aligning balancing adjusting tuning optimizing improving enhancing upgrading modifying revising updating refreshing renewing reinstating restoring recovering repairing fixing correcting troubleshooting diagnosing analyzing evaluating assessing appraising auditing inspecting examining investigating probing exploring discovering uncover revealing exposing showcasing displaying exhibiting presenting demonstrating illustrating depicting portraying representing symbolizing signifying denoting indicating pointing suggesting implying inferring deducing concluding deriving computing calculating estimating approximating forecasting predicting projecting speculating hypothesizing theorizing assuming presupposing postulating arguing debating discussing conversing communicating interacting engaging participating collaborating cooperating competing challenging confronting opposing resisting denying rejecting refusing declining declining declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined declined

---related---

## 相关文章

- [高速木材加工激光位移与机器视觉选型指南](../问答ZLDS100Rd木材几何参数测量/content.md)
- [隧道形变监测传感器选型指南](../问答LCJ系列铁路轨道位移监测/content.md)
- [隧道形变监测激光位移与全站仪选型指南](../问答LCJ系列铁路轨道位移监测2/content.md)
- [机器人路面缺陷检测传感器选型指南](../问答ZLDS100Rd机器人引导测量/content.md)
- [汽车零部件自动化生产线测量方案选型指南](../问答ZLDS100Rd汽车生产领域距离测量/content.md)
- [车身内衬自动化装配高精度选型指南:激光位移测量与机器视觉定位](../问答ZLDS100Rd车身内衬精密定位/content.md)
- [户外高速路面检测激光位移传感器选型指南](../问答ZLDS100Rd高温光学位移测量/content.md)
- [小型精密组件高度检测:激光位移传感器与视觉方案对比指南](../问答ZLDS103小型组件高度检查/content.md)

---end-related---
