1
在做抓取的时候,不知道什么原因,无法直接抓到,于是想到调用迅雷下载,这个是网站上找的,没想到还很好用,我只是使用了简单的下载文件功能。
2![](/Images/OutliningIndicators/None.gif)
3
【导读】本文详细讲解了使用VB.NET编程来调用讯雷下载文件的过程和步骤。内容包括:创建讯雷调用对象、使用讯雷调用对象查询下载任务信息、迅雷平台接口函数定义等。
4![](/Images/OutliningIndicators/None.gif)
5
6
首先确保电脑已经安装讯雷,打开VS.NET 点击菜单:项目->添加引用->COM->添加对ThunderAgent 1.0 Type Library的引用。
7![](/Images/OutliningIndicators/None.gif)
8
1.创建讯雷调用对象
9![](/Images/OutliningIndicators/None.gif)
10
Private ThunderEng As New THUNDERAGENTLib.Agent'创建讯雷调用对象
11![](/Images/OutliningIndicators/None.gif)
12![](/Images/OutliningIndicators/None.gif)
13![](/Images/OutliningIndicators/None.gif)
14
ThunderEng.AddTask("下载地址", "另存文件名", "保存目录","任务注释","引用地址","开始模式", "只从原始地址下载","从原始地址下载线程数") '添加下载任务
15![](/Images/OutliningIndicators/None.gif)
16![](/Images/OutliningIndicators/None.gif)
17![](/Images/OutliningIndicators/None.gif)
18
ThunderEng.CommitTasks()'提交下载任务
19![](/Images/OutliningIndicators/None.gif)
20![](/Images/OutliningIndicators/None.gif)
21![](/Images/OutliningIndicators/None.gif)
22
2.使用讯雷调用对象查询下载任务信息
23![](/Images/OutliningIndicators/None.gif)
24
sFileSize = ThunderEng.GetTaskInfo(txtURL.Text, "FileSize")'获取下载文件大小
25![](/Images/OutliningIndicators/None.gif)
26
sDownedSize = ThunderEng.GetTaskInfo(txtURL.Text, "CompletedSize")'获取已完成大小
27![](/Images/OutliningIndicators/None.gif)
28
sFileName = ThunderEng.GetTaskInfo(txtURL.Text, "FileName")'获取文件名
29![](/Images/OutliningIndicators/None.gif)
30
二、迅雷平台接口函数定义
31![](/Images/OutliningIndicators/None.gif)
32
获得信息
33![](/Images/OutliningIndicators/None.gif)
34
1. BSTR GetInfo(BSTR pInfoName)
35![](/Images/OutliningIndicators/None.gif)
36
功能:获得迅雷或平台相关信息
37![](/Images/OutliningIndicators/None.gif)
38
参数:
39![](/Images/OutliningIndicators/None.gif)
40
参数名 含义
41
pInfoName 信息名称,有如下4种
42![](/Images/OutliningIndicators/None.gif)
43
◆“ThunderExists”:迅雷是否存在
44![](/Images/OutliningIndicators/None.gif)
45
◆“ThunderRunning”:迅雷是否运行
46![](/Images/OutliningIndicators/None.gif)
47
◆“ThunderVersion”:迅雷版本号
48![](/Images/OutliningIndicators/None.gif)
49
◆“PlatformVersion”:平台版本号
50![](/Images/OutliningIndicators/None.gif)
51![](/Images/OutliningIndicators/None.gif)
52
返回值:返回值是字符串与参数pInfoName有对应关系
53![](/Images/OutliningIndicators/None.gif)
54
参数 返回值
55
“ThunderExists” “true”存在,“false”不存在
56
“ThunderRunning” “true” 运行中, “false”未运行
57
“ThunderVersion” 迅雷版本号 “x.x.x.x”
58
“PlatformVersion” 平台版本号 “x.x.x.x”
59![](/Images/OutliningIndicators/None.gif)
60![](/Images/OutliningIndicators/None.gif)
61
2. HRESULT GetInfoStruct(INT pInfo)
62![](/Images/OutliningIndicators/None.gif)
63
功能:获取迅雷或平台相关全部信息
64![](/Images/OutliningIndicators/None.gif)
65
参数:
66![](/Images/OutliningIndicators/None.gif)
67
参数名 含义
68
pInfo 其实是THUNDER_INFO类型的结构指针,调用前把它转换为INT类型;调用后结构中将填充平台信息,定义如下:
69![](/Images/OutliningIndicators/None.gif)
70
typedef struct _THUNDER_INFO
71![](/Images/OutliningIndicators/None.gif)
72
{
73![](/Images/OutliningIndicators/None.gif)
74
BOOL bThunderExists;
75![](/Images/OutliningIndicators/None.gif)
76
BOOL bThunderRunning;
77![](/Images/OutliningIndicators/None.gif)
78
CHAR szThunderVersion[32];
79![](/Images/OutliningIndicators/None.gif)
80
CHAR szPlatformVersion[32];
81![](/Images/OutliningIndicators/None.gif)
82
} THUNDER_INFO;
83![](/Images/OutliningIndicators/None.gif)
84
函数调用后,结构中将填充相应的信息。
85![](/Images/OutliningIndicators/None.gif)
86![](/Images/OutliningIndicators/None.gif)
87
返回值:
88![](/Images/OutliningIndicators/None.gif)
89
0 获取成功
90
非0 获取失败
91![](/Images/OutliningIndicators/None.gif)
92![](/Images/OutliningIndicators/None.gif)
93
任务操作
94![](/Images/OutliningIndicators/None.gif)
95
3. 加入任务
96![](/Images/OutliningIndicators/None.gif)
97
HRESULT AddTask
98![](/Images/OutliningIndicators/None.gif)
99
(BSTR pURL,
100![](/Images/OutliningIndicators/None.gif)
101
BSTR pFileName = "",
102![](/Images/OutliningIndicators/None.gif)
103
BSTR pPath = "",
104![](/Images/OutliningIndicators/None.gif)
105
BSTR pComments = "",
106![](/Images/OutliningIndicators/None.gif)
107
BSTR pReferURL = "",
108![](/Images/OutliningIndicators/None.gif)
109
INT nStartMode = -1,
110![](/Images/OutliningIndicators/None.gif)
111
INT nOnlyFromOrigin = 0,
112![](/Images/OutliningIndicators/None.gif)
113
INT nOriginThreadCount = -1);
114![](/Images/OutliningIndicators/None.gif)
115
功能:
116![](/Images/OutliningIndicators/None.gif)
117
往平台加入下载任务信息,此时尚未体现到迅雷中
118![](/Images/OutliningIndicators/None.gif)
119
参数:
120![](/Images/OutliningIndicators/None.gif)
121![](/Images/OutliningIndicators/None.gif)
122![](/Images/OutliningIndicators/None.gif)
123
参数名 含义
124
pURL 目标URL,必须参数
125
pFileName 另存名称,默认为空,表示由迅雷处理,可选参数
126
pPath 存储目录,默认为空,表示由迅雷处理,可选参数
127
pComments 下载注释,默认为空,可选参数
128
pReferURL 引用页URL,默认为空,可选参数
129
nStartMode 开始模式,0手工开始,1立即开始,默认为-1,表示由迅雷处理,可选参数
130
nOnlyFromOrigin 是否只从原始URL下载,1只从原始URL下载,0多资源下载,默认为0,可选参数
131
nOriginThreadCount 原始地址下载线程数,范围1-10,默认为-1,表示由迅雷处理,可选参数
132![](/Images/OutliningIndicators/None.gif)
133![](/Images/OutliningIndicators/None.gif)
134![](/Images/OutliningIndicators/None.gif)
135
136![](/Images/OutliningIndicators/None.gif)
137
138![](/Images/OutliningIndicators/None.gif)
139
4. 开始任务
140![](/Images/OutliningIndicators/None.gif)
141![](/Images/OutliningIndicators/None.gif)
142![](/Images/OutliningIndicators/None.gif)
143
HRESULT CommitTaskss()
144![](/Images/OutliningIndicators/None.gif)
145
功能:
146![](/Images/OutliningIndicators/None.gif)
147
把AddTask所加入的下载任务信息真正提交到迅雷中进行下载,并从平台中删除
148![](/Images/OutliningIndicators/None.gif)
149
注意:如果AddTask添加的任务没有被提交没有被取消(调用CancelTasks),则Agent对象析构时会阻塞,所以调用者不应该残留一些没有被提交或者取消的任务,以避免脚本执行者停止响应。
150![](/Images/OutliningIndicators/None.gif)
151
5. 取消任务
152![](/Images/OutliningIndicators/None.gif)
153
HRESULT CancelTasks()
154![](/Images/OutliningIndicators/None.gif)
155
功能:
156![](/Images/OutliningIndicators/None.gif)
157
取消平台中所有由AddTask所加入的下载任务信息
158![](/Images/OutliningIndicators/None.gif)
159
6. 查询任务信息
160![](/Images/OutliningIndicators/None.gif)
161
BSTR GetTaskInfo(BSTR pURL,BSTR pInfoName);
162![](/Images/OutliningIndicators/None.gif)
163
参数:
164![](/Images/OutliningIndicators/None.gif)
165![](/Images/OutliningIndicators/None.gif)
166![](/Images/OutliningIndicators/None.gif)
167
参数名 含义
168
pURL 所要查询的下载URL信息
169
pInfoName 状态名称,有如下几种
170![](/Images/OutliningIndicators/None.gif)
171
◆“Exists”:pURL是否在迅雷的任务列表
172![](/Images/OutliningIndicators/None.gif)
173
◆“Path”:存储目录
174![](/Images/OutliningIndicators/None.gif)
175
◆“FileName”:文件名称
176![](/Images/OutliningIndicators/None.gif)
177
◆“FileSize”:文件大小
178![](/Images/OutliningIndicators/None.gif)
179
◆“CompletedSize”:已下载大小
180![](/Images/OutliningIndicators/None.gif)
181
◆“Percent”:下载进度
182![](/Images/OutliningIndicators/None.gif)
183
◆“Status”:任务状态
184![](/Images/OutliningIndicators/None.gif)
185![](/Images/OutliningIndicators/None.gif)
186![](/Images/OutliningIndicators/None.gif)
187![](/Images/OutliningIndicators/None.gif)
188
返回值: 返回值是字符串与参数pInfoName有对应关系
189![](/Images/OutliningIndicators/None.gif)
190![](/Images/OutliningIndicators/None.gif)
191![](/Images/OutliningIndicators/None.gif)
192
参数 返回值
193
“Exists” ”true”存在,”false”不存在
194
“Path” 存储目录,最后带反斜线\,例:C:\TDDownload\
195
“FileName” 文件名称
196
“FileSize” 文件大小,以字节为单位,0表示大小未知
197
“CompletedSize” 已下载大小,以字节为单位
198
“Percent” 下载进度,带1位小数,例:70.0
199
“Status” 任务状态,有以下6种状态
200![](/Images/OutliningIndicators/None.gif)
201
。“running”: 运行状态
202![](/Images/OutliningIndicators/None.gif)
203
。“stopped”: 停止状态
204![](/Images/OutliningIndicators/None.gif)
205
。“failed”: 失败状态
206![](/Images/OutliningIndicators/None.gif)
207
。“success”: 成功状态
208![](/Images/OutliningIndicators/None.gif)
209
。“creatingfile”:正在创建数据文件
210![](/Images/OutliningIndicators/None.gif)
211
。“connecting”: 正在连接
212![](/Images/OutliningIndicators/None.gif)
213![](/Images/OutliningIndicators/None.gif)
214![](/Images/OutliningIndicators/None.gif)
215![](/Images/OutliningIndicators/None.gif)
216
7. GetTaskInfoStruct(INT pTaskInfo)
217![](/Images/OutliningIndicators/None.gif)
218
功能:查询一个任务的所有信息
219![](/Images/OutliningIndicators/None.gif)
220![](/Images/OutliningIndicators/None.gif)
221![](/Images/OutliningIndicators/None.gif)
222
参数名 含义
223
pTaskInfo 其实是THUNDER_TASKINFO类型的结构指针,调用前把它转换为INT类型;调用后结构中将填充平台信息,定义如下:
224![](/Images/OutliningIndicators/None.gif)
225
typedef struct _THUNDER_TASKINFO
226![](/Images/OutliningIndicators/None.gif)
227
{
228![](/Images/OutliningIndicators/None.gif)
229
CHAR szURL[1024]; // 任务URL,预先填充
230![](/Images/OutliningIndicators/None.gif)
231
BOOL bTaskExists; // 任务是否存在,TRUE为存在
232![](/Images/OutliningIndicators/None.gif)
233
CHAR szPath[256]; // 下载的本地保存路径
234![](/Images/OutliningIndicators/None.gif)
235
CHAR szFileName[256]; // 本地文件名
236![](/Images/OutliningIndicators/None.gif)
237
ULONGLONG nFileSize; // 文件大小
238![](/Images/OutliningIndicators/None.gif)
239
ULONGLONG nCompletedSize; // 已完成的大小
240![](/Images/OutliningIndicators/None.gif)
241
CHAR szPercent[16]; // 完成的百分数,用 “56.8”的格式
242![](/Images/OutliningIndicators/None.gif)
243
CHAR szStatus[16]; // 当前状态,定义同GetTaskInfo函数
244![](/Images/OutliningIndicators/None.gif)
245
} THUNDER_TASKINFO;
246![](/Images/OutliningIndicators/None.gif)
247
调用者先填充结构中的szURL成员,来指定需要查询的任务的URL,然后等函数返回后就可以从其他成员中取得该任务的信息。
248![](/Images/OutliningIndicators/None.gif)
249![](/Images/OutliningIndicators/None.gif)
250
本例所有代码:
251![](/Images/OutliningIndicators/None.gif)
252
Imports SystemImports System.TextPublic Class frmThunderClass frmThunderPrivate _iStartMode As Integer '讯雷任务下载开始模式Private ThunderEng As New THUNDERAGENTLib.Agent '创建讯雷调用对象Private Sub frmThunder_Load()Sub frmThunder_Load(ByVal sender As System.Object,
253
ByVal e As System.EventArgs) Handles MyBase.LoadEnd SubPrivate Sub btnCancel_Click()Sub btnCancel_Click(ByVal sender As System.Object,
254
ByVal e As System.EventArgs) Handles btnCancel.ClickClose()End Sub'开始下载任务Private Sub btnStartDown_Click()Sub btnStartDown_Click(ByVal sender As System.Object,
255
ByVal e As System.EventArgs) Handles btnStartDown.ClickDim iOnlyFromOrigin, iOriginThreadCount As IntegeriOnlyFromOrigin = IIf(chkOnlyFromOrigin.Checked = True, 1, 0)iOriginThreadCount = CInt(txtOriginThreadCounts.Text)If chkDefault.Checked TheniOriginThreadCount = -1End IfThunderEng.AddTask(txtURL.Text, txtSaveAsFileName.Text, txtSaveDir.Text,
256
txtComment.Text, _ txtReferencePage.Text, _iStartMode, iOnlyFromOrigin,
257
iOriginThreadCount)ThunderEng.CommitTasks()Timer1.Enabled = TrueEnd SubPrivate Sub radMaual_Click()Sub radMaual_Click(ByVal sender As System.Object,
258
ByVal e As System.EventArgs) Handles radMaual.Click, radImmediate.Click,
259
radDefault.ClickDim rad As RadioButton = CType(sender, RadioButton)_iStartMode = CInt(rad.Tag)End Sub'当任务开始时定时查询任务下载信息Private Sub Timer1_Tick()Sub Timer1_Tick(ByVal sender As System.Object,
260
ByVal e As System.EventArgs) Handles Timer1.TickDim sFileSize, sDownedSize, sStatus, sFileName, sPercent As StringTrysStatus = ThunderEng.GetTaskInfo(txtURL.Text, "Status")sFileSize = ThunderEng.GetTaskInfo(txtURL.Text, "FileSize")sDownedSize = ThunderEng.GetTaskInfo(txtURL.Text, "CompletedSize")sFileName = ThunderEng.GetTaskInfo(txtURL.Text, "FileName")lblDownedSize.Text = String.Format(lblDownedSize.Tag, sDownedSize)lblFileSize.Text = String.Format(lblFileSize.Tag, sFileSize)lblTaskStatus.Text = String.Format(lblTaskStatus.Tag, sStatus)lblFilename.Text = String.Format(lblFilename.Tag, sFileName)sPercent = ThunderEng.GetTaskInfo(txtURL.Text, "Percent") '获取下载百分比lblProgress.Text = String.Format(lblProgress.Tag,
261
sPercent.Remove(3, Len(sPercent) - 3))Catch ex As ExceptionEnd TryEnd SubPrivate Sub chkOnlyFromOrigin_CheckedChanged_1()Sub
262
chkOnlyFromOrigin_CheckedChanged_1(ByVal sender As System.Object,
263
ByVal e As System.EventArgs) Handles chkOnlyFromOrigin.CheckedChangedPanel1.Enabled = chkOnlyFromOrigin.CheckedEnd SubPrivate Sub GroupBox1_Enter()Sub GroupBox1_Enter(ByVal sender As System.Object,
264
ByVal e As System.EventArgs) Handles GroupBox1.EnterEnd SubEnd Class
265
266![](/Images/OutliningIndicators/InBlock.gif)
267![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/None.gif)
12
![](/Images/OutliningIndicators/None.gif)
13
![](/Images/OutliningIndicators/None.gif)
14
![](/Images/OutliningIndicators/None.gif)
15
![](/Images/OutliningIndicators/None.gif)
16
![](/Images/OutliningIndicators/None.gif)
17
![](/Images/OutliningIndicators/None.gif)
18
![](/Images/OutliningIndicators/None.gif)
19
![](/Images/OutliningIndicators/None.gif)
20
![](/Images/OutliningIndicators/None.gif)
21
![](/Images/OutliningIndicators/None.gif)
22
![](/Images/OutliningIndicators/None.gif)
23
![](/Images/OutliningIndicators/None.gif)
24
![](/Images/OutliningIndicators/None.gif)
25
![](/Images/OutliningIndicators/None.gif)
26
![](/Images/OutliningIndicators/None.gif)
27
![](/Images/OutliningIndicators/None.gif)
28
![](/Images/OutliningIndicators/None.gif)
29
![](/Images/OutliningIndicators/None.gif)
30
![](/Images/OutliningIndicators/None.gif)
31
![](/Images/OutliningIndicators/None.gif)
32
![](/Images/OutliningIndicators/None.gif)
33
![](/Images/OutliningIndicators/None.gif)
34
![](/Images/OutliningIndicators/None.gif)
35
![](/Images/OutliningIndicators/None.gif)
36
![](/Images/OutliningIndicators/None.gif)
37
![](/Images/OutliningIndicators/None.gif)
38
![](/Images/OutliningIndicators/None.gif)
39
![](/Images/OutliningIndicators/None.gif)
40
![](/Images/OutliningIndicators/None.gif)
41
![](/Images/OutliningIndicators/None.gif)
42
![](/Images/OutliningIndicators/None.gif)
43
![](/Images/OutliningIndicators/None.gif)
44
![](/Images/OutliningIndicators/None.gif)
45
![](/Images/OutliningIndicators/None.gif)
46
![](/Images/OutliningIndicators/None.gif)
47
![](/Images/OutliningIndicators/None.gif)
48
![](/Images/OutliningIndicators/None.gif)
49
![](/Images/OutliningIndicators/None.gif)
50
![](/Images/OutliningIndicators/None.gif)
51
![](/Images/OutliningIndicators/None.gif)
52
![](/Images/OutliningIndicators/None.gif)
53
![](/Images/OutliningIndicators/None.gif)
54
![](/Images/OutliningIndicators/None.gif)
55
![](/Images/OutliningIndicators/None.gif)
56
![](/Images/OutliningIndicators/None.gif)
57
![](/Images/OutliningIndicators/None.gif)
58
![](/Images/OutliningIndicators/None.gif)
59
![](/Images/OutliningIndicators/None.gif)
60
![](/Images/OutliningIndicators/None.gif)
61
![](/Images/OutliningIndicators/None.gif)
62
![](/Images/OutliningIndicators/None.gif)
63
![](/Images/OutliningIndicators/None.gif)
64
![](/Images/OutliningIndicators/None.gif)
65
![](/Images/OutliningIndicators/None.gif)
66
![](/Images/OutliningIndicators/None.gif)
67
![](/Images/OutliningIndicators/None.gif)
68
![](/Images/OutliningIndicators/None.gif)
69
![](/Images/OutliningIndicators/None.gif)
70
![](/Images/OutliningIndicators/None.gif)
71
![](/Images/OutliningIndicators/None.gif)
72
![](/Images/OutliningIndicators/None.gif)
73
![](/Images/OutliningIndicators/None.gif)
74
![](/Images/OutliningIndicators/None.gif)
75
![](/Images/OutliningIndicators/None.gif)
76
![](/Images/OutliningIndicators/None.gif)
77
![](/Images/OutliningIndicators/None.gif)
78
![](/Images/OutliningIndicators/None.gif)
79
![](/Images/OutliningIndicators/None.gif)
80
![](/Images/OutliningIndicators/None.gif)
81
![](/Images/OutliningIndicators/None.gif)
82
![](/Images/OutliningIndicators/None.gif)
83
![](/Images/OutliningIndicators/None.gif)
84
![](/Images/OutliningIndicators/None.gif)
85
![](/Images/OutliningIndicators/None.gif)
86
![](/Images/OutliningIndicators/None.gif)
87
![](/Images/OutliningIndicators/None.gif)
88
![](/Images/OutliningIndicators/None.gif)
89
![](/Images/OutliningIndicators/None.gif)
90
![](/Images/OutliningIndicators/None.gif)
91
![](/Images/OutliningIndicators/None.gif)
92
![](/Images/OutliningIndicators/None.gif)
93
![](/Images/OutliningIndicators/None.gif)
94
![](/Images/OutliningIndicators/None.gif)
95
![](/Images/OutliningIndicators/None.gif)
96
![](/Images/OutliningIndicators/None.gif)
97
![](/Images/OutliningIndicators/None.gif)
98
![](/Images/OutliningIndicators/None.gif)
99
![](/Images/OutliningIndicators/None.gif)
100
![](/Images/OutliningIndicators/None.gif)
101
![](/Images/OutliningIndicators/None.gif)
102
![](/Images/OutliningIndicators/None.gif)
103
![](/Images/OutliningIndicators/None.gif)
104
![](/Images/OutliningIndicators/None.gif)
105
![](/Images/OutliningIndicators/None.gif)
106
![](/Images/OutliningIndicators/None.gif)
107
![](/Images/OutliningIndicators/None.gif)
108
![](/Images/OutliningIndicators/None.gif)
109
![](/Images/OutliningIndicators/None.gif)
110
![](/Images/OutliningIndicators/None.gif)
111
![](/Images/OutliningIndicators/None.gif)
112
![](/Images/OutliningIndicators/None.gif)
113
![](/Images/OutliningIndicators/None.gif)
114
![](/Images/OutliningIndicators/None.gif)
115
![](/Images/OutliningIndicators/None.gif)
116
![](/Images/OutliningIndicators/None.gif)
117
![](/Images/OutliningIndicators/None.gif)
118
![](/Images/OutliningIndicators/None.gif)
119
![](/Images/OutliningIndicators/None.gif)
120
![](/Images/OutliningIndicators/None.gif)
121
![](/Images/OutliningIndicators/None.gif)
122
![](/Images/OutliningIndicators/None.gif)
123
![](/Images/OutliningIndicators/None.gif)
124
![](/Images/OutliningIndicators/None.gif)
125
![](/Images/OutliningIndicators/None.gif)
126
![](/Images/OutliningIndicators/None.gif)
127
![](/Images/OutliningIndicators/None.gif)
128
![](/Images/OutliningIndicators/None.gif)
129
![](/Images/OutliningIndicators/None.gif)
130
![](/Images/OutliningIndicators/None.gif)
131
![](/Images/OutliningIndicators/None.gif)
132
![](/Images/OutliningIndicators/None.gif)
133
![](/Images/OutliningIndicators/None.gif)
134
![](/Images/OutliningIndicators/None.gif)
135
![](/Images/OutliningIndicators/None.gif)
136
![](/Images/OutliningIndicators/None.gif)
137
![](/Images/OutliningIndicators/None.gif)
138
![](/Images/OutliningIndicators/None.gif)
139
![](/Images/OutliningIndicators/None.gif)
140
![](/Images/OutliningIndicators/None.gif)
141
![](/Images/OutliningIndicators/None.gif)
142
![](/Images/OutliningIndicators/None.gif)
143
![](/Images/OutliningIndicators/None.gif)
144
![](/Images/OutliningIndicators/None.gif)
145
![](/Images/OutliningIndicators/None.gif)
146
![](/Images/OutliningIndicators/None.gif)
147
![](/Images/OutliningIndicators/None.gif)
148
![](/Images/OutliningIndicators/None.gif)
149
![](/Images/OutliningIndicators/None.gif)
150
![](/Images/OutliningIndicators/None.gif)
151
![](/Images/OutliningIndicators/None.gif)
152
![](/Images/OutliningIndicators/None.gif)
153
![](/Images/OutliningIndicators/None.gif)
154
![](/Images/OutliningIndicators/None.gif)
155
![](/Images/OutliningIndicators/None.gif)
156
![](/Images/OutliningIndicators/None.gif)
157
![](/Images/OutliningIndicators/None.gif)
158
![](/Images/OutliningIndicators/None.gif)
159
![](/Images/OutliningIndicators/None.gif)
160
![](/Images/OutliningIndicators/None.gif)
161
![](/Images/OutliningIndicators/None.gif)
162
![](/Images/OutliningIndicators/None.gif)
163
![](/Images/OutliningIndicators/None.gif)
164
![](/Images/OutliningIndicators/None.gif)
165
![](/Images/OutliningIndicators/None.gif)
166
![](/Images/OutliningIndicators/None.gif)
167
![](/Images/OutliningIndicators/None.gif)
168
![](/Images/OutliningIndicators/None.gif)
169
![](/Images/OutliningIndicators/None.gif)
170
![](/Images/OutliningIndicators/None.gif)
171
![](/Images/OutliningIndicators/None.gif)
172
![](/Images/OutliningIndicators/None.gif)
173
![](/Images/OutliningIndicators/None.gif)
174
![](/Images/OutliningIndicators/None.gif)
175
![](/Images/OutliningIndicators/None.gif)
176
![](/Images/OutliningIndicators/None.gif)
177
![](/Images/OutliningIndicators/None.gif)
178
![](/Images/OutliningIndicators/None.gif)
179
![](/Images/OutliningIndicators/None.gif)
180
![](/Images/OutliningIndicators/None.gif)
181
![](/Images/OutliningIndicators/None.gif)
182
![](/Images/OutliningIndicators/None.gif)
183
![](/Images/OutliningIndicators/None.gif)
184
![](/Images/OutliningIndicators/None.gif)
185
![](/Images/OutliningIndicators/None.gif)
186
![](/Images/OutliningIndicators/None.gif)
187
![](/Images/OutliningIndicators/None.gif)
188
![](/Images/OutliningIndicators/None.gif)
189
![](/Images/OutliningIndicators/None.gif)
190
![](/Images/OutliningIndicators/None.gif)
191
![](/Images/OutliningIndicators/None.gif)
192
![](/Images/OutliningIndicators/None.gif)
193
![](/Images/OutliningIndicators/None.gif)
194
![](/Images/OutliningIndicators/None.gif)
195
![](/Images/OutliningIndicators/None.gif)
196
![](/Images/OutliningIndicators/None.gif)
197
![](/Images/OutliningIndicators/None.gif)
198
![](/Images/OutliningIndicators/None.gif)
199
![](/Images/OutliningIndicators/None.gif)
200
![](/Images/OutliningIndicators/None.gif)
201
![](/Images/OutliningIndicators/None.gif)
202
![](/Images/OutliningIndicators/None.gif)
203
![](/Images/OutliningIndicators/None.gif)
204
![](/Images/OutliningIndicators/None.gif)
205
![](/Images/OutliningIndicators/None.gif)
206
![](/Images/OutliningIndicators/None.gif)
207
![](/Images/OutliningIndicators/None.gif)
208
![](/Images/OutliningIndicators/None.gif)
209
![](/Images/OutliningIndicators/None.gif)
210
![](/Images/OutliningIndicators/None.gif)
211
![](/Images/OutliningIndicators/None.gif)
212
![](/Images/OutliningIndicators/None.gif)
213
![](/Images/OutliningIndicators/None.gif)
214
![](/Images/OutliningIndicators/None.gif)
215
![](/Images/OutliningIndicators/None.gif)
216
![](/Images/OutliningIndicators/None.gif)
217
![](/Images/OutliningIndicators/None.gif)
218
![](/Images/OutliningIndicators/None.gif)
219
![](/Images/OutliningIndicators/None.gif)
220
![](/Images/OutliningIndicators/None.gif)
221
![](/Images/OutliningIndicators/None.gif)
222
![](/Images/OutliningIndicators/None.gif)
223
![](/Images/OutliningIndicators/None.gif)
224
![](/Images/OutliningIndicators/None.gif)
225
![](/Images/OutliningIndicators/None.gif)
226
![](/Images/OutliningIndicators/None.gif)
227
![](/Images/OutliningIndicators/None.gif)
228
![](/Images/OutliningIndicators/None.gif)
229
![](/Images/OutliningIndicators/None.gif)
230
![](/Images/OutliningIndicators/None.gif)
231
![](/Images/OutliningIndicators/None.gif)
232
![](/Images/OutliningIndicators/None.gif)
233
![](/Images/OutliningIndicators/None.gif)
234
![](/Images/OutliningIndicators/None.gif)
235
![](/Images/OutliningIndicators/None.gif)
236
![](/Images/OutliningIndicators/None.gif)
237
![](/Images/OutliningIndicators/None.gif)
238
![](/Images/OutliningIndicators/None.gif)
239
![](/Images/OutliningIndicators/None.gif)
240
![](/Images/OutliningIndicators/None.gif)
241
![](/Images/OutliningIndicators/None.gif)
242
![](/Images/OutliningIndicators/None.gif)
243
![](/Images/OutliningIndicators/None.gif)
244
![](/Images/OutliningIndicators/None.gif)
245
![](/Images/OutliningIndicators/None.gif)
246
![](/Images/OutliningIndicators/None.gif)
247
![](/Images/OutliningIndicators/None.gif)
248
![](/Images/OutliningIndicators/None.gif)
249
![](/Images/OutliningIndicators/None.gif)
250
![](/Images/OutliningIndicators/None.gif)
251
![](/Images/OutliningIndicators/None.gif)
252
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
253
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
254
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
255
![](/Images/OutliningIndicators/InBlock.gif)
256
![](/Images/OutliningIndicators/InBlock.gif)
257
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
258
![](/Images/OutliningIndicators/InBlock.gif)
259
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
260
![](/Images/OutliningIndicators/InBlock.gif)
261
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
262
![](/Images/OutliningIndicators/InBlock.gif)
263
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
264
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
265
![](/Images/OutliningIndicators/InBlock.gif)
266
![](/Images/OutliningIndicators/InBlock.gif)
267
![](/Images/OutliningIndicators/InBlock.gif)