@basementuniverse/kanbn 1.1.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/coverage-summary.json +31 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +146 -0
- package/coverage/kanbn/index.html +116 -0
- package/coverage/kanbn/index.js.html +217 -0
- package/coverage/kanbn/src/board.js.html +646 -0
- package/coverage/kanbn/src/controller/add.js.html +1729 -0
- package/coverage/kanbn/src/controller/archive.js.html +277 -0
- package/coverage/kanbn/src/controller/board.js.html +217 -0
- package/coverage/kanbn/src/controller/burndown.js.html +607 -0
- package/coverage/kanbn/src/controller/comment.js.html +397 -0
- package/coverage/kanbn/src/controller/edit.js.html +2920 -0
- package/coverage/kanbn/src/controller/find.js.html +1597 -0
- package/coverage/kanbn/src/controller/gantt.js.html +1342 -0
- package/coverage/kanbn/src/controller/help.js.html +115 -0
- package/coverage/kanbn/src/controller/history.js.html +400 -0
- package/coverage/kanbn/src/controller/index.html +431 -0
- package/coverage/kanbn/src/controller/init.js.html +511 -0
- package/coverage/kanbn/src/controller/move.js.html +514 -0
- package/coverage/kanbn/src/controller/remove-all.js.html +226 -0
- package/coverage/kanbn/src/controller/remove.js.html +307 -0
- package/coverage/kanbn/src/controller/rename.js.html +397 -0
- package/coverage/kanbn/src/controller/restore.js.html +268 -0
- package/coverage/kanbn/src/controller/sort.js.html +1318 -0
- package/coverage/kanbn/src/controller/sprint.js.html +361 -0
- package/coverage/kanbn/src/controller/status.js.html +310 -0
- package/coverage/kanbn/src/controller/task.js.html +244 -0
- package/coverage/kanbn/src/controller/validate.js.html +367 -0
- package/coverage/kanbn/src/controller/version.js.html +100 -0
- package/coverage/kanbn/src/index.html +191 -0
- package/coverage/kanbn/src/main.js.html +9787 -0
- package/coverage/kanbn/src/parse-index.js.html +1063 -0
- package/coverage/kanbn/src/parse-markdown.js.html +202 -0
- package/coverage/kanbn/src/parse-task.js.html +2191 -0
- package/coverage/kanbn/src/utility.js.html +616 -0
- package/coverage/lcov.info +11837 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/coverage/tmp/coverage-214292-1787777191526-0.json +1 -0
- package/coverage/tmp/coverage-214293-1787777184569-0.json +1 -0
- package/docs/advanced-configuration.md +2 -0
- package/docs/commands/add.txt +10 -0
- package/docs/commands/board.txt +3 -1
- package/docs/commands/burndown.txt +2 -4
- package/docs/commands/edit.txt +22 -0
- package/docs/commands/find.txt +45 -1
- package/docs/commands/help.txt +1 -0
- package/docs/commands/move.txt +1 -1
- package/docs/commands/sort.txt +13 -2
- package/docs/commands/validate.txt +12 -0
- package/docs/filtering-and-sorting.md +218 -0
- package/docs/index-structure.md +68 -19
- package/docs/index.md +26 -2
- package/docs/migration-2.0.md +92 -0
- package/docs/quick-start.md +37 -1
- package/docs/task-structure.md +12 -3
- package/docs/views.md +229 -0
- package/example/README.md +70 -0
- package/example/advanced/.kanbn/index.md +26 -0
- package/example/advanced/.kanbn/tasks/add-rate-limiting.md +18 -0
- package/example/advanced/.kanbn/tasks/add-sso-support.md +15 -0
- package/example/advanced/.kanbn/tasks/migrate-to-new-cdn.md +14 -0
- package/example/advanced/.kanbn/tasks/refresh-marketing-site.md +14 -0
- package/example/advanced/.kanbn/tasks/rotate-api-keys.md +15 -0
- package/example/advanced/.kanbn/tasks/split-billing-service.md +17 -0
- package/example/advanced/.kanbn/tasks/upgrade-node-runtime.md +19 -0
- package/example/advanced/kanbn.yml +59 -0
- package/example/views/.kanbn/index.md +140 -0
- package/example/views/.kanbn/tasks/add-audit-log-export.md +18 -0
- package/example/views/.kanbn/tasks/add-dark-mode-toggle.md +16 -0
- package/example/views/.kanbn/tasks/build-webhook-retry-queue.md +15 -0
- package/example/views/.kanbn/tasks/fix-avatar-upload-crash.md +13 -0
- package/example/views/.kanbn/tasks/fix-expired-session-redirect.md +15 -0
- package/example/views/.kanbn/tasks/investigate-offline-mode.md +12 -0
- package/example/views/.kanbn/tasks/rewrite-search-indexer.md +12 -0
- package/example/views/.kanbn/tasks/tidy-up-settings-copy.md +12 -0
- package/package.json +4 -3
- package/routes/edit.json +2 -1
- package/routes/validate.json +4 -2
- package/skills/kanbn-plan/references/index-structure.md +1 -0
- package/skills/kanbn-plan/references/task-structure.md +2 -0
- package/src/board.js +1 -0
- package/src/controller/board.js +6 -0
- package/src/controller/edit.js +65 -12
- package/src/controller/gantt.js +46 -1
- package/src/controller/status.js +12 -0
- package/src/controller/task.js +1 -1
- package/src/controller/validate.js +78 -15
- package/src/main.js +324 -152
- package/src/parse-index.js +3 -0
- package/src/parse-markdown.js +3 -1
- package/src/parse-task.js +28 -1
- package/src/utility.js +26 -1
- /package/example/{.kanbn → basic/.kanbn}/index.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/add-basic-activity-feed.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/add-passwordless-login-option.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/add-usage-alert-email-thresholds.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/build-email-template-system.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/build-invoice-download-endpoint.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/build-tenant-settings-page.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/create-organization-switcher.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/create-sandbox-environment-provisioner.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/create-self-serve-cancellation-flow.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/define-product-pricing-strategy.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/design-onboarding-checklist.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/design-team-invite-expiry-flow.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/implement-data-retention-policy-jobs.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/implement-feature-flags-foundation.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/implement-project-creation-wizard.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/implement-stripe-webhook-signature-check.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/implement-team-permissions-ui.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/implement-user-signup-and-login.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/integrate-crm-lead-sync.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/legal-review-terms-and-privacy.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/migrate-legacy-events-to-new-schema.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/optimize-dashboard-first-load.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/prototype-report-export-scheduler.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/publish-internal-qa-checklist.md +0 -0
- /package/example/{.kanbn → basic/.kanbn}/tasks/setup-ci-pipeline.md +0 -0
|
@@ -0,0 +1,1597 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for kanbn/src/controller/find.js</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../../index.html">All files</a> / <a href="index.html">kanbn/src/controller</a> find.js</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">81.74% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>412/504</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">76.69% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>79/103</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>14/14</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">81.74% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>412/504</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
+
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
+
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
+
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
+
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
+
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
+
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
+
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
+
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
+
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
+
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
+
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
+
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
+
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
+
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
+
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
+
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
+
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
+
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
+
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
+
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
+
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
+
<a name='L337'></a><a href='#L337'>337</a>
|
|
403
|
+
<a name='L338'></a><a href='#L338'>338</a>
|
|
404
|
+
<a name='L339'></a><a href='#L339'>339</a>
|
|
405
|
+
<a name='L340'></a><a href='#L340'>340</a>
|
|
406
|
+
<a name='L341'></a><a href='#L341'>341</a>
|
|
407
|
+
<a name='L342'></a><a href='#L342'>342</a>
|
|
408
|
+
<a name='L343'></a><a href='#L343'>343</a>
|
|
409
|
+
<a name='L344'></a><a href='#L344'>344</a>
|
|
410
|
+
<a name='L345'></a><a href='#L345'>345</a>
|
|
411
|
+
<a name='L346'></a><a href='#L346'>346</a>
|
|
412
|
+
<a name='L347'></a><a href='#L347'>347</a>
|
|
413
|
+
<a name='L348'></a><a href='#L348'>348</a>
|
|
414
|
+
<a name='L349'></a><a href='#L349'>349</a>
|
|
415
|
+
<a name='L350'></a><a href='#L350'>350</a>
|
|
416
|
+
<a name='L351'></a><a href='#L351'>351</a>
|
|
417
|
+
<a name='L352'></a><a href='#L352'>352</a>
|
|
418
|
+
<a name='L353'></a><a href='#L353'>353</a>
|
|
419
|
+
<a name='L354'></a><a href='#L354'>354</a>
|
|
420
|
+
<a name='L355'></a><a href='#L355'>355</a>
|
|
421
|
+
<a name='L356'></a><a href='#L356'>356</a>
|
|
422
|
+
<a name='L357'></a><a href='#L357'>357</a>
|
|
423
|
+
<a name='L358'></a><a href='#L358'>358</a>
|
|
424
|
+
<a name='L359'></a><a href='#L359'>359</a>
|
|
425
|
+
<a name='L360'></a><a href='#L360'>360</a>
|
|
426
|
+
<a name='L361'></a><a href='#L361'>361</a>
|
|
427
|
+
<a name='L362'></a><a href='#L362'>362</a>
|
|
428
|
+
<a name='L363'></a><a href='#L363'>363</a>
|
|
429
|
+
<a name='L364'></a><a href='#L364'>364</a>
|
|
430
|
+
<a name='L365'></a><a href='#L365'>365</a>
|
|
431
|
+
<a name='L366'></a><a href='#L366'>366</a>
|
|
432
|
+
<a name='L367'></a><a href='#L367'>367</a>
|
|
433
|
+
<a name='L368'></a><a href='#L368'>368</a>
|
|
434
|
+
<a name='L369'></a><a href='#L369'>369</a>
|
|
435
|
+
<a name='L370'></a><a href='#L370'>370</a>
|
|
436
|
+
<a name='L371'></a><a href='#L371'>371</a>
|
|
437
|
+
<a name='L372'></a><a href='#L372'>372</a>
|
|
438
|
+
<a name='L373'></a><a href='#L373'>373</a>
|
|
439
|
+
<a name='L374'></a><a href='#L374'>374</a>
|
|
440
|
+
<a name='L375'></a><a href='#L375'>375</a>
|
|
441
|
+
<a name='L376'></a><a href='#L376'>376</a>
|
|
442
|
+
<a name='L377'></a><a href='#L377'>377</a>
|
|
443
|
+
<a name='L378'></a><a href='#L378'>378</a>
|
|
444
|
+
<a name='L379'></a><a href='#L379'>379</a>
|
|
445
|
+
<a name='L380'></a><a href='#L380'>380</a>
|
|
446
|
+
<a name='L381'></a><a href='#L381'>381</a>
|
|
447
|
+
<a name='L382'></a><a href='#L382'>382</a>
|
|
448
|
+
<a name='L383'></a><a href='#L383'>383</a>
|
|
449
|
+
<a name='L384'></a><a href='#L384'>384</a>
|
|
450
|
+
<a name='L385'></a><a href='#L385'>385</a>
|
|
451
|
+
<a name='L386'></a><a href='#L386'>386</a>
|
|
452
|
+
<a name='L387'></a><a href='#L387'>387</a>
|
|
453
|
+
<a name='L388'></a><a href='#L388'>388</a>
|
|
454
|
+
<a name='L389'></a><a href='#L389'>389</a>
|
|
455
|
+
<a name='L390'></a><a href='#L390'>390</a>
|
|
456
|
+
<a name='L391'></a><a href='#L391'>391</a>
|
|
457
|
+
<a name='L392'></a><a href='#L392'>392</a>
|
|
458
|
+
<a name='L393'></a><a href='#L393'>393</a>
|
|
459
|
+
<a name='L394'></a><a href='#L394'>394</a>
|
|
460
|
+
<a name='L395'></a><a href='#L395'>395</a>
|
|
461
|
+
<a name='L396'></a><a href='#L396'>396</a>
|
|
462
|
+
<a name='L397'></a><a href='#L397'>397</a>
|
|
463
|
+
<a name='L398'></a><a href='#L398'>398</a>
|
|
464
|
+
<a name='L399'></a><a href='#L399'>399</a>
|
|
465
|
+
<a name='L400'></a><a href='#L400'>400</a>
|
|
466
|
+
<a name='L401'></a><a href='#L401'>401</a>
|
|
467
|
+
<a name='L402'></a><a href='#L402'>402</a>
|
|
468
|
+
<a name='L403'></a><a href='#L403'>403</a>
|
|
469
|
+
<a name='L404'></a><a href='#L404'>404</a>
|
|
470
|
+
<a name='L405'></a><a href='#L405'>405</a>
|
|
471
|
+
<a name='L406'></a><a href='#L406'>406</a>
|
|
472
|
+
<a name='L407'></a><a href='#L407'>407</a>
|
|
473
|
+
<a name='L408'></a><a href='#L408'>408</a>
|
|
474
|
+
<a name='L409'></a><a href='#L409'>409</a>
|
|
475
|
+
<a name='L410'></a><a href='#L410'>410</a>
|
|
476
|
+
<a name='L411'></a><a href='#L411'>411</a>
|
|
477
|
+
<a name='L412'></a><a href='#L412'>412</a>
|
|
478
|
+
<a name='L413'></a><a href='#L413'>413</a>
|
|
479
|
+
<a name='L414'></a><a href='#L414'>414</a>
|
|
480
|
+
<a name='L415'></a><a href='#L415'>415</a>
|
|
481
|
+
<a name='L416'></a><a href='#L416'>416</a>
|
|
482
|
+
<a name='L417'></a><a href='#L417'>417</a>
|
|
483
|
+
<a name='L418'></a><a href='#L418'>418</a>
|
|
484
|
+
<a name='L419'></a><a href='#L419'>419</a>
|
|
485
|
+
<a name='L420'></a><a href='#L420'>420</a>
|
|
486
|
+
<a name='L421'></a><a href='#L421'>421</a>
|
|
487
|
+
<a name='L422'></a><a href='#L422'>422</a>
|
|
488
|
+
<a name='L423'></a><a href='#L423'>423</a>
|
|
489
|
+
<a name='L424'></a><a href='#L424'>424</a>
|
|
490
|
+
<a name='L425'></a><a href='#L425'>425</a>
|
|
491
|
+
<a name='L426'></a><a href='#L426'>426</a>
|
|
492
|
+
<a name='L427'></a><a href='#L427'>427</a>
|
|
493
|
+
<a name='L428'></a><a href='#L428'>428</a>
|
|
494
|
+
<a name='L429'></a><a href='#L429'>429</a>
|
|
495
|
+
<a name='L430'></a><a href='#L430'>430</a>
|
|
496
|
+
<a name='L431'></a><a href='#L431'>431</a>
|
|
497
|
+
<a name='L432'></a><a href='#L432'>432</a>
|
|
498
|
+
<a name='L433'></a><a href='#L433'>433</a>
|
|
499
|
+
<a name='L434'></a><a href='#L434'>434</a>
|
|
500
|
+
<a name='L435'></a><a href='#L435'>435</a>
|
|
501
|
+
<a name='L436'></a><a href='#L436'>436</a>
|
|
502
|
+
<a name='L437'></a><a href='#L437'>437</a>
|
|
503
|
+
<a name='L438'></a><a href='#L438'>438</a>
|
|
504
|
+
<a name='L439'></a><a href='#L439'>439</a>
|
|
505
|
+
<a name='L440'></a><a href='#L440'>440</a>
|
|
506
|
+
<a name='L441'></a><a href='#L441'>441</a>
|
|
507
|
+
<a name='L442'></a><a href='#L442'>442</a>
|
|
508
|
+
<a name='L443'></a><a href='#L443'>443</a>
|
|
509
|
+
<a name='L444'></a><a href='#L444'>444</a>
|
|
510
|
+
<a name='L445'></a><a href='#L445'>445</a>
|
|
511
|
+
<a name='L446'></a><a href='#L446'>446</a>
|
|
512
|
+
<a name='L447'></a><a href='#L447'>447</a>
|
|
513
|
+
<a name='L448'></a><a href='#L448'>448</a>
|
|
514
|
+
<a name='L449'></a><a href='#L449'>449</a>
|
|
515
|
+
<a name='L450'></a><a href='#L450'>450</a>
|
|
516
|
+
<a name='L451'></a><a href='#L451'>451</a>
|
|
517
|
+
<a name='L452'></a><a href='#L452'>452</a>
|
|
518
|
+
<a name='L453'></a><a href='#L453'>453</a>
|
|
519
|
+
<a name='L454'></a><a href='#L454'>454</a>
|
|
520
|
+
<a name='L455'></a><a href='#L455'>455</a>
|
|
521
|
+
<a name='L456'></a><a href='#L456'>456</a>
|
|
522
|
+
<a name='L457'></a><a href='#L457'>457</a>
|
|
523
|
+
<a name='L458'></a><a href='#L458'>458</a>
|
|
524
|
+
<a name='L459'></a><a href='#L459'>459</a>
|
|
525
|
+
<a name='L460'></a><a href='#L460'>460</a>
|
|
526
|
+
<a name='L461'></a><a href='#L461'>461</a>
|
|
527
|
+
<a name='L462'></a><a href='#L462'>462</a>
|
|
528
|
+
<a name='L463'></a><a href='#L463'>463</a>
|
|
529
|
+
<a name='L464'></a><a href='#L464'>464</a>
|
|
530
|
+
<a name='L465'></a><a href='#L465'>465</a>
|
|
531
|
+
<a name='L466'></a><a href='#L466'>466</a>
|
|
532
|
+
<a name='L467'></a><a href='#L467'>467</a>
|
|
533
|
+
<a name='L468'></a><a href='#L468'>468</a>
|
|
534
|
+
<a name='L469'></a><a href='#L469'>469</a>
|
|
535
|
+
<a name='L470'></a><a href='#L470'>470</a>
|
|
536
|
+
<a name='L471'></a><a href='#L471'>471</a>
|
|
537
|
+
<a name='L472'></a><a href='#L472'>472</a>
|
|
538
|
+
<a name='L473'></a><a href='#L473'>473</a>
|
|
539
|
+
<a name='L474'></a><a href='#L474'>474</a>
|
|
540
|
+
<a name='L475'></a><a href='#L475'>475</a>
|
|
541
|
+
<a name='L476'></a><a href='#L476'>476</a>
|
|
542
|
+
<a name='L477'></a><a href='#L477'>477</a>
|
|
543
|
+
<a name='L478'></a><a href='#L478'>478</a>
|
|
544
|
+
<a name='L479'></a><a href='#L479'>479</a>
|
|
545
|
+
<a name='L480'></a><a href='#L480'>480</a>
|
|
546
|
+
<a name='L481'></a><a href='#L481'>481</a>
|
|
547
|
+
<a name='L482'></a><a href='#L482'>482</a>
|
|
548
|
+
<a name='L483'></a><a href='#L483'>483</a>
|
|
549
|
+
<a name='L484'></a><a href='#L484'>484</a>
|
|
550
|
+
<a name='L485'></a><a href='#L485'>485</a>
|
|
551
|
+
<a name='L486'></a><a href='#L486'>486</a>
|
|
552
|
+
<a name='L487'></a><a href='#L487'>487</a>
|
|
553
|
+
<a name='L488'></a><a href='#L488'>488</a>
|
|
554
|
+
<a name='L489'></a><a href='#L489'>489</a>
|
|
555
|
+
<a name='L490'></a><a href='#L490'>490</a>
|
|
556
|
+
<a name='L491'></a><a href='#L491'>491</a>
|
|
557
|
+
<a name='L492'></a><a href='#L492'>492</a>
|
|
558
|
+
<a name='L493'></a><a href='#L493'>493</a>
|
|
559
|
+
<a name='L494'></a><a href='#L494'>494</a>
|
|
560
|
+
<a name='L495'></a><a href='#L495'>495</a>
|
|
561
|
+
<a name='L496'></a><a href='#L496'>496</a>
|
|
562
|
+
<a name='L497'></a><a href='#L497'>497</a>
|
|
563
|
+
<a name='L498'></a><a href='#L498'>498</a>
|
|
564
|
+
<a name='L499'></a><a href='#L499'>499</a>
|
|
565
|
+
<a name='L500'></a><a href='#L500'>500</a>
|
|
566
|
+
<a name='L501'></a><a href='#L501'>501</a>
|
|
567
|
+
<a name='L502'></a><a href='#L502'>502</a>
|
|
568
|
+
<a name='L503'></a><a href='#L503'>503</a>
|
|
569
|
+
<a name='L504'></a><a href='#L504'>504</a>
|
|
570
|
+
<a name='L505'></a><a href='#L505'>505</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">10x</span>
|
|
571
|
+
<span class="cline-any cline-yes">10x</span>
|
|
572
|
+
<span class="cline-any cline-yes">10x</span>
|
|
573
|
+
<span class="cline-any cline-yes">10x</span>
|
|
574
|
+
<span class="cline-any cline-yes">10x</span>
|
|
575
|
+
<span class="cline-any cline-yes">10x</span>
|
|
576
|
+
<span class="cline-any cline-yes">10x</span>
|
|
577
|
+
<span class="cline-any cline-yes">10x</span>
|
|
578
|
+
<span class="cline-any cline-yes">10x</span>
|
|
579
|
+
<span class="cline-any cline-yes">10x</span>
|
|
580
|
+
<span class="cline-any cline-yes">10x</span>
|
|
581
|
+
<span class="cline-any cline-yes">10x</span>
|
|
582
|
+
<span class="cline-any cline-yes">10x</span>
|
|
583
|
+
<span class="cline-any cline-yes">10x</span>
|
|
584
|
+
<span class="cline-any cline-yes">10x</span>
|
|
585
|
+
<span class="cline-any cline-yes">10x</span>
|
|
586
|
+
<span class="cline-any cline-yes">10x</span>
|
|
587
|
+
<span class="cline-any cline-yes">10x</span>
|
|
588
|
+
<span class="cline-any cline-yes">10x</span>
|
|
589
|
+
<span class="cline-any cline-yes">10x</span>
|
|
590
|
+
<span class="cline-any cline-yes">10x</span>
|
|
591
|
+
<span class="cline-any cline-yes">10x</span>
|
|
592
|
+
<span class="cline-any cline-yes">10x</span>
|
|
593
|
+
<span class="cline-any cline-yes">10x</span>
|
|
594
|
+
<span class="cline-any cline-yes">10x</span>
|
|
595
|
+
<span class="cline-any cline-yes">10x</span>
|
|
596
|
+
<span class="cline-any cline-yes">10x</span>
|
|
597
|
+
<span class="cline-any cline-yes">10x</span>
|
|
598
|
+
<span class="cline-any cline-yes">10x</span>
|
|
599
|
+
<span class="cline-any cline-yes">10x</span>
|
|
600
|
+
<span class="cline-any cline-yes">10x</span>
|
|
601
|
+
<span class="cline-any cline-yes">10x</span>
|
|
602
|
+
<span class="cline-any cline-yes">10x</span>
|
|
603
|
+
<span class="cline-any cline-yes">10x</span>
|
|
604
|
+
<span class="cline-any cline-yes">10x</span>
|
|
605
|
+
<span class="cline-any cline-yes">10x</span>
|
|
606
|
+
<span class="cline-any cline-yes">10x</span>
|
|
607
|
+
<span class="cline-any cline-yes">10x</span>
|
|
608
|
+
<span class="cline-any cline-yes">10x</span>
|
|
609
|
+
<span class="cline-any cline-yes">10x</span>
|
|
610
|
+
<span class="cline-any cline-yes">10x</span>
|
|
611
|
+
<span class="cline-any cline-yes">10x</span>
|
|
612
|
+
<span class="cline-any cline-yes">10x</span>
|
|
613
|
+
<span class="cline-any cline-yes">10x</span>
|
|
614
|
+
<span class="cline-any cline-yes">10x</span>
|
|
615
|
+
<span class="cline-any cline-yes">10x</span>
|
|
616
|
+
<span class="cline-any cline-yes">10x</span>
|
|
617
|
+
<span class="cline-any cline-yes">10x</span>
|
|
618
|
+
<span class="cline-any cline-yes">10x</span>
|
|
619
|
+
<span class="cline-any cline-yes">10x</span>
|
|
620
|
+
<span class="cline-any cline-yes">10x</span>
|
|
621
|
+
<span class="cline-any cline-yes">10x</span>
|
|
622
|
+
<span class="cline-any cline-yes">10x</span>
|
|
623
|
+
<span class="cline-any cline-yes">10x</span>
|
|
624
|
+
<span class="cline-any cline-yes">10x</span>
|
|
625
|
+
<span class="cline-any cline-yes">10x</span>
|
|
626
|
+
<span class="cline-any cline-yes">10x</span>
|
|
627
|
+
<span class="cline-any cline-yes">10x</span>
|
|
628
|
+
<span class="cline-any cline-yes">10x</span>
|
|
629
|
+
<span class="cline-any cline-yes">10x</span>
|
|
630
|
+
<span class="cline-any cline-yes">10x</span>
|
|
631
|
+
<span class="cline-any cline-yes">10x</span>
|
|
632
|
+
<span class="cline-any cline-yes">10x</span>
|
|
633
|
+
<span class="cline-any cline-yes">10x</span>
|
|
634
|
+
<span class="cline-any cline-yes">10x</span>
|
|
635
|
+
<span class="cline-any cline-yes">10x</span>
|
|
636
|
+
<span class="cline-any cline-yes">10x</span>
|
|
637
|
+
<span class="cline-any cline-yes">10x</span>
|
|
638
|
+
<span class="cline-any cline-yes">10x</span>
|
|
639
|
+
<span class="cline-any cline-yes">10x</span>
|
|
640
|
+
<span class="cline-any cline-yes">10x</span>
|
|
641
|
+
<span class="cline-any cline-yes">10x</span>
|
|
642
|
+
<span class="cline-any cline-yes">10x</span>
|
|
643
|
+
<span class="cline-any cline-yes">10x</span>
|
|
644
|
+
<span class="cline-any cline-yes">10x</span>
|
|
645
|
+
<span class="cline-any cline-yes">10x</span>
|
|
646
|
+
<span class="cline-any cline-yes">10x</span>
|
|
647
|
+
<span class="cline-any cline-yes">10x</span>
|
|
648
|
+
<span class="cline-any cline-yes">10x</span>
|
|
649
|
+
<span class="cline-any cline-yes">10x</span>
|
|
650
|
+
<span class="cline-any cline-yes">10x</span>
|
|
651
|
+
<span class="cline-any cline-yes">10x</span>
|
|
652
|
+
<span class="cline-any cline-yes">10x</span>
|
|
653
|
+
<span class="cline-any cline-yes">10x</span>
|
|
654
|
+
<span class="cline-any cline-yes">10x</span>
|
|
655
|
+
<span class="cline-any cline-yes">10x</span>
|
|
656
|
+
<span class="cline-any cline-yes">10x</span>
|
|
657
|
+
<span class="cline-any cline-yes">10x</span>
|
|
658
|
+
<span class="cline-any cline-yes">10x</span>
|
|
659
|
+
<span class="cline-any cline-yes">10x</span>
|
|
660
|
+
<span class="cline-any cline-yes">10x</span>
|
|
661
|
+
<span class="cline-any cline-yes">10x</span>
|
|
662
|
+
<span class="cline-any cline-yes">10x</span>
|
|
663
|
+
<span class="cline-any cline-yes">10x</span>
|
|
664
|
+
<span class="cline-any cline-yes">10x</span>
|
|
665
|
+
<span class="cline-any cline-yes">10x</span>
|
|
666
|
+
<span class="cline-any cline-yes">10x</span>
|
|
667
|
+
<span class="cline-any cline-yes">10x</span>
|
|
668
|
+
<span class="cline-any cline-yes">10x</span>
|
|
669
|
+
<span class="cline-any cline-yes">10x</span>
|
|
670
|
+
<span class="cline-any cline-yes">10x</span>
|
|
671
|
+
<span class="cline-any cline-yes">10x</span>
|
|
672
|
+
<span class="cline-any cline-yes">10x</span>
|
|
673
|
+
<span class="cline-any cline-yes">10x</span>
|
|
674
|
+
<span class="cline-any cline-yes">10x</span>
|
|
675
|
+
<span class="cline-any cline-yes">10x</span>
|
|
676
|
+
<span class="cline-any cline-yes">10x</span>
|
|
677
|
+
<span class="cline-any cline-yes">10x</span>
|
|
678
|
+
<span class="cline-any cline-yes">10x</span>
|
|
679
|
+
<span class="cline-any cline-yes">10x</span>
|
|
680
|
+
<span class="cline-any cline-yes">10x</span>
|
|
681
|
+
<span class="cline-any cline-yes">10x</span>
|
|
682
|
+
<span class="cline-any cline-yes">10x</span>
|
|
683
|
+
<span class="cline-any cline-yes">10x</span>
|
|
684
|
+
<span class="cline-any cline-yes">10x</span>
|
|
685
|
+
<span class="cline-any cline-yes">10x</span>
|
|
686
|
+
<span class="cline-any cline-yes">10x</span>
|
|
687
|
+
<span class="cline-any cline-yes">10x</span>
|
|
688
|
+
<span class="cline-any cline-yes">10x</span>
|
|
689
|
+
<span class="cline-any cline-yes">10x</span>
|
|
690
|
+
<span class="cline-any cline-yes">8x</span>
|
|
691
|
+
<span class="cline-any cline-yes">8x</span>
|
|
692
|
+
<span class="cline-any cline-yes">8x</span>
|
|
693
|
+
<span class="cline-any cline-yes">8x</span>
|
|
694
|
+
<span class="cline-any cline-yes">8x</span>
|
|
695
|
+
<span class="cline-any cline-yes">8x</span>
|
|
696
|
+
<span class="cline-any cline-yes">8x</span>
|
|
697
|
+
<span class="cline-any cline-yes">8x</span>
|
|
698
|
+
<span class="cline-any cline-yes">8x</span>
|
|
699
|
+
<span class="cline-any cline-yes">8x</span>
|
|
700
|
+
<span class="cline-any cline-yes">8x</span>
|
|
701
|
+
<span class="cline-any cline-yes">8x</span>
|
|
702
|
+
<span class="cline-any cline-yes">8x</span>
|
|
703
|
+
<span class="cline-any cline-yes">8x</span>
|
|
704
|
+
<span class="cline-any cline-yes">8x</span>
|
|
705
|
+
<span class="cline-any cline-yes">8x</span>
|
|
706
|
+
<span class="cline-any cline-yes">8x</span>
|
|
707
|
+
<span class="cline-any cline-yes">8x</span>
|
|
708
|
+
<span class="cline-any cline-yes">8x</span>
|
|
709
|
+
<span class="cline-any cline-yes">8x</span>
|
|
710
|
+
<span class="cline-any cline-yes">8x</span>
|
|
711
|
+
<span class="cline-any cline-yes">8x</span>
|
|
712
|
+
<span class="cline-any cline-yes">8x</span>
|
|
713
|
+
<span class="cline-any cline-yes">8x</span>
|
|
714
|
+
<span class="cline-any cline-yes">8x</span>
|
|
715
|
+
<span class="cline-any cline-yes">8x</span>
|
|
716
|
+
<span class="cline-any cline-yes">11x</span>
|
|
717
|
+
<span class="cline-any cline-yes">11x</span>
|
|
718
|
+
<span class="cline-any cline-yes">8x</span>
|
|
719
|
+
<span class="cline-any cline-yes">8x</span>
|
|
720
|
+
<span class="cline-any cline-yes">9x</span>
|
|
721
|
+
<span class="cline-any cline-yes">1x</span>
|
|
722
|
+
<span class="cline-any cline-yes">1x</span>
|
|
723
|
+
<span class="cline-any cline-yes">8x</span>
|
|
724
|
+
<span class="cline-any cline-yes">9x</span>
|
|
725
|
+
<span class="cline-any cline-yes">8x</span>
|
|
726
|
+
<span class="cline-any cline-yes">8x</span>
|
|
727
|
+
<span class="cline-any cline-yes">8x</span>
|
|
728
|
+
<span class="cline-any cline-yes">8x</span>
|
|
729
|
+
<span class="cline-any cline-yes">8x</span>
|
|
730
|
+
<span class="cline-any cline-yes">8x</span>
|
|
731
|
+
<span class="cline-any cline-yes">8x</span>
|
|
732
|
+
<span class="cline-any cline-yes">10x</span>
|
|
733
|
+
<span class="cline-any cline-yes">10x</span>
|
|
734
|
+
<span class="cline-any cline-yes">8x</span>
|
|
735
|
+
<span class="cline-any cline-yes">8x</span>
|
|
736
|
+
<span class="cline-any cline-yes">1x</span>
|
|
737
|
+
<span class="cline-any cline-no"> </span>
|
|
738
|
+
<span class="cline-any cline-no"> </span>
|
|
739
|
+
<span class="cline-any cline-yes">1x</span>
|
|
740
|
+
<span class="cline-any cline-yes">1x</span>
|
|
741
|
+
<span class="cline-any cline-yes">1x</span>
|
|
742
|
+
<span class="cline-any cline-no"> </span>
|
|
743
|
+
<span class="cline-any cline-yes">1x</span>
|
|
744
|
+
<span class="cline-any cline-yes">8x</span>
|
|
745
|
+
<span class="cline-any cline-yes">8x</span>
|
|
746
|
+
<span class="cline-any cline-yes">8x</span>
|
|
747
|
+
<span class="cline-any cline-yes">8x</span>
|
|
748
|
+
<span class="cline-any cline-yes">8x</span>
|
|
749
|
+
<span class="cline-any cline-yes">8x</span>
|
|
750
|
+
<span class="cline-any cline-yes">8x</span>
|
|
751
|
+
<span class="cline-any cline-yes">9x</span>
|
|
752
|
+
<span class="cline-any cline-yes">9x</span>
|
|
753
|
+
<span class="cline-any cline-yes">8x</span>
|
|
754
|
+
<span class="cline-any cline-yes">8x</span>
|
|
755
|
+
<span class="cline-any cline-yes">1x</span>
|
|
756
|
+
<span class="cline-any cline-no"> </span>
|
|
757
|
+
<span class="cline-any cline-no"> </span>
|
|
758
|
+
<span class="cline-any cline-yes">1x</span>
|
|
759
|
+
<span class="cline-any cline-yes">1x</span>
|
|
760
|
+
<span class="cline-any cline-yes">1x</span>
|
|
761
|
+
<span class="cline-any cline-no"> </span>
|
|
762
|
+
<span class="cline-any cline-yes">1x</span>
|
|
763
|
+
<span class="cline-any cline-yes">8x</span>
|
|
764
|
+
<span class="cline-any cline-yes">8x</span>
|
|
765
|
+
<span class="cline-any cline-yes">8x</span>
|
|
766
|
+
<span class="cline-any cline-yes">8x</span>
|
|
767
|
+
<span class="cline-any cline-yes">8x</span>
|
|
768
|
+
<span class="cline-any cline-yes">8x</span>
|
|
769
|
+
<span class="cline-any cline-yes">8x</span>
|
|
770
|
+
<span class="cline-any cline-yes">8x</span>
|
|
771
|
+
<span class="cline-any cline-yes">8x</span>
|
|
772
|
+
<span class="cline-any cline-yes">8x</span>
|
|
773
|
+
<span class="cline-any cline-yes">8x</span>
|
|
774
|
+
<span class="cline-any cline-yes">8x</span>
|
|
775
|
+
<span class="cline-any cline-yes">8x</span>
|
|
776
|
+
<span class="cline-any cline-yes">8x</span>
|
|
777
|
+
<span class="cline-any cline-yes">8x</span>
|
|
778
|
+
<span class="cline-any cline-yes">10x</span>
|
|
779
|
+
<span class="cline-any cline-yes">10x</span>
|
|
780
|
+
<span class="cline-any cline-yes">10x</span>
|
|
781
|
+
<span class="cline-any cline-yes">10x</span>
|
|
782
|
+
<span class="cline-any cline-yes">10x</span>
|
|
783
|
+
<span class="cline-any cline-yes">10x</span>
|
|
784
|
+
<span class="cline-any cline-yes">10x</span>
|
|
785
|
+
<span class="cline-any cline-yes">13x</span>
|
|
786
|
+
<span class="cline-any cline-yes">13x</span>
|
|
787
|
+
<span class="cline-any cline-yes">1x</span>
|
|
788
|
+
<span class="cline-any cline-yes">13x</span>
|
|
789
|
+
<span class="cline-any cline-yes">13x</span>
|
|
790
|
+
<span class="cline-any cline-yes">13x</span>
|
|
791
|
+
<span class="cline-any cline-yes">13x</span>
|
|
792
|
+
<span class="cline-any cline-yes">13x</span>
|
|
793
|
+
<span class="cline-any cline-yes">2x</span>
|
|
794
|
+
<span class="cline-any cline-yes">13x</span>
|
|
795
|
+
<span class="cline-any cline-yes">11x</span>
|
|
796
|
+
<span class="cline-any cline-yes">1x</span>
|
|
797
|
+
<span class="cline-any cline-yes">11x</span>
|
|
798
|
+
<span class="cline-any cline-yes">10x</span>
|
|
799
|
+
<span class="cline-any cline-yes">10x</span>
|
|
800
|
+
<span class="cline-any cline-yes">1x</span>
|
|
801
|
+
<span class="cline-any cline-yes">1x</span>
|
|
802
|
+
<span class="cline-any cline-yes">10x</span>
|
|
803
|
+
<span class="cline-any cline-yes">10x</span>
|
|
804
|
+
<span class="cline-any cline-yes">11x</span>
|
|
805
|
+
<span class="cline-any cline-yes">13x</span>
|
|
806
|
+
<span class="cline-any cline-yes">13x</span>
|
|
807
|
+
<span class="cline-any cline-no"> </span>
|
|
808
|
+
<span class="cline-any cline-yes">13x</span>
|
|
809
|
+
<span class="cline-any cline-yes">13x</span>
|
|
810
|
+
<span class="cline-any cline-yes">10x</span>
|
|
811
|
+
<span class="cline-any cline-yes">10x</span>
|
|
812
|
+
<span class="cline-any cline-yes">10x</span>
|
|
813
|
+
<span class="cline-any cline-yes">10x</span>
|
|
814
|
+
<span class="cline-any cline-yes">10x</span>
|
|
815
|
+
<span class="cline-any cline-yes">10x</span>
|
|
816
|
+
<span class="cline-any cline-yes">10x</span>
|
|
817
|
+
<span class="cline-any cline-yes">8x</span>
|
|
818
|
+
<span class="cline-any cline-yes">8x</span>
|
|
819
|
+
<span class="cline-any cline-yes">2x</span>
|
|
820
|
+
<span class="cline-any cline-yes">1x</span>
|
|
821
|
+
<span class="cline-any cline-yes">1x</span>
|
|
822
|
+
<span class="cline-any cline-yes">1x</span>
|
|
823
|
+
<span class="cline-any cline-yes">1x</span>
|
|
824
|
+
<span class="cline-any cline-yes">8x</span>
|
|
825
|
+
<span class="cline-any cline-yes">6x</span>
|
|
826
|
+
<span class="cline-any cline-yes">6x</span>
|
|
827
|
+
<span class="cline-any cline-yes">8x</span>
|
|
828
|
+
<span class="cline-any cline-yes">10x</span>
|
|
829
|
+
<span class="cline-any cline-yes">10x</span>
|
|
830
|
+
<span class="cline-any cline-yes">10x</span>
|
|
831
|
+
<span class="cline-any cline-yes">10x</span>
|
|
832
|
+
<span class="cline-any cline-yes">10x</span>
|
|
833
|
+
<span class="cline-any cline-yes">10x</span>
|
|
834
|
+
<span class="cline-any cline-yes">10x</span>
|
|
835
|
+
<span class="cline-any cline-yes">3x</span>
|
|
836
|
+
<span class="cline-any cline-yes">3x</span>
|
|
837
|
+
<span class="cline-any cline-no"> </span>
|
|
838
|
+
<span class="cline-any cline-no"> </span>
|
|
839
|
+
<span class="cline-any cline-no"> </span>
|
|
840
|
+
<span class="cline-any cline-no"> </span>
|
|
841
|
+
<span class="cline-any cline-no"> </span>
|
|
842
|
+
<span class="cline-any cline-no"> </span>
|
|
843
|
+
<span class="cline-any cline-no"> </span>
|
|
844
|
+
<span class="cline-any cline-yes">3x</span>
|
|
845
|
+
<span class="cline-any cline-yes">3x</span>
|
|
846
|
+
<span class="cline-any cline-yes">3x</span>
|
|
847
|
+
<span class="cline-any cline-yes">2x</span>
|
|
848
|
+
<span class="cline-any cline-yes">2x</span>
|
|
849
|
+
<span class="cline-any cline-yes">1x</span>
|
|
850
|
+
<span class="cline-any cline-yes">1x</span>
|
|
851
|
+
<span class="cline-any cline-yes">1x</span>
|
|
852
|
+
<span class="cline-any cline-yes">3x</span>
|
|
853
|
+
<span class="cline-any cline-yes">10x</span>
|
|
854
|
+
<span class="cline-any cline-yes">10x</span>
|
|
855
|
+
<span class="cline-any cline-yes">10x</span>
|
|
856
|
+
<span class="cline-any cline-yes">10x</span>
|
|
857
|
+
<span class="cline-any cline-yes">10x</span>
|
|
858
|
+
<span class="cline-any cline-yes">10x</span>
|
|
859
|
+
<span class="cline-any cline-yes">10x</span>
|
|
860
|
+
<span class="cline-any cline-yes">2x</span>
|
|
861
|
+
<span class="cline-any cline-yes">2x</span>
|
|
862
|
+
<span class="cline-any cline-no"> </span>
|
|
863
|
+
<span class="cline-any cline-no"> </span>
|
|
864
|
+
<span class="cline-any cline-no"> </span>
|
|
865
|
+
<span class="cline-any cline-no"> </span>
|
|
866
|
+
<span class="cline-any cline-no"> </span>
|
|
867
|
+
<span class="cline-any cline-no"> </span>
|
|
868
|
+
<span class="cline-any cline-no"> </span>
|
|
869
|
+
<span class="cline-any cline-yes">2x</span>
|
|
870
|
+
<span class="cline-any cline-yes">2x</span>
|
|
871
|
+
<span class="cline-any cline-yes">2x</span>
|
|
872
|
+
<span class="cline-any cline-yes">1x</span>
|
|
873
|
+
<span class="cline-any cline-yes">1x</span>
|
|
874
|
+
<span class="cline-any cline-yes">1x</span>
|
|
875
|
+
<span class="cline-any cline-yes">1x</span>
|
|
876
|
+
<span class="cline-any cline-yes">1x</span>
|
|
877
|
+
<span class="cline-any cline-yes">2x</span>
|
|
878
|
+
<span class="cline-any cline-yes">10x</span>
|
|
879
|
+
<span class="cline-any cline-yes">10x</span>
|
|
880
|
+
<span class="cline-any cline-yes">21x</span>
|
|
881
|
+
<span class="cline-any cline-yes">21x</span>
|
|
882
|
+
<span class="cline-any cline-yes">21x</span>
|
|
883
|
+
<span class="cline-any cline-yes">1x</span>
|
|
884
|
+
<span class="cline-any cline-yes">1x</span>
|
|
885
|
+
<span class="cline-any cline-yes">1x</span>
|
|
886
|
+
<span class="cline-any cline-yes">20x</span>
|
|
887
|
+
<span class="cline-any cline-yes">20x</span>
|
|
888
|
+
<span class="cline-any cline-yes">20x</span>
|
|
889
|
+
<span class="cline-any cline-yes">20x</span>
|
|
890
|
+
<span class="cline-any cline-yes">20x</span>
|
|
891
|
+
<span class="cline-any cline-yes">21x</span>
|
|
892
|
+
<span class="cline-any cline-no"> </span>
|
|
893
|
+
<span class="cline-any cline-no"> </span>
|
|
894
|
+
<span class="cline-any cline-no"> </span>
|
|
895
|
+
<span class="cline-any cline-yes">20x</span>
|
|
896
|
+
<span class="cline-any cline-yes">21x</span>
|
|
897
|
+
<span class="cline-any cline-yes">1x</span>
|
|
898
|
+
<span class="cline-any cline-yes">1x</span>
|
|
899
|
+
<span class="cline-any cline-yes">1x</span>
|
|
900
|
+
<span class="cline-any cline-yes">19x</span>
|
|
901
|
+
<span class="cline-any cline-yes">19x</span>
|
|
902
|
+
<span class="cline-any cline-yes">21x</span>
|
|
903
|
+
<span class="cline-any cline-yes">1x</span>
|
|
904
|
+
<span class="cline-any cline-yes">1x</span>
|
|
905
|
+
<span class="cline-any cline-yes">1x</span>
|
|
906
|
+
<span class="cline-any cline-yes">1x</span>
|
|
907
|
+
<span class="cline-any cline-yes">1x</span>
|
|
908
|
+
<span class="cline-any cline-yes">1x</span>
|
|
909
|
+
<span class="cline-any cline-yes">1x</span>
|
|
910
|
+
<span class="cline-any cline-yes">1x</span>
|
|
911
|
+
<span class="cline-any cline-yes">19x</span>
|
|
912
|
+
<span class="cline-any cline-yes">19x</span>
|
|
913
|
+
<span class="cline-any cline-yes">19x</span>
|
|
914
|
+
<span class="cline-any cline-yes">21x</span>
|
|
915
|
+
<span class="cline-any cline-yes">400x</span>
|
|
916
|
+
<span class="cline-any cline-yes">8x</span>
|
|
917
|
+
<span class="cline-any cline-yes">8x</span>
|
|
918
|
+
<span class="cline-any cline-yes">400x</span>
|
|
919
|
+
<span class="cline-any cline-yes">19x</span>
|
|
920
|
+
<span class="cline-any cline-yes">19x</span>
|
|
921
|
+
<span class="cline-any cline-yes">21x</span>
|
|
922
|
+
<span class="cline-any cline-no"> </span>
|
|
923
|
+
<span class="cline-any cline-no"> </span>
|
|
924
|
+
<span class="cline-any cline-no"> </span>
|
|
925
|
+
<span class="cline-any cline-no"> </span>
|
|
926
|
+
<span class="cline-any cline-no"> </span>
|
|
927
|
+
<span class="cline-any cline-yes">21x</span>
|
|
928
|
+
<span class="cline-any cline-yes">2x</span>
|
|
929
|
+
<span class="cline-any cline-yes">1x</span>
|
|
930
|
+
<span class="cline-any cline-yes">1x</span>
|
|
931
|
+
<span class="cline-any cline-yes">1x</span>
|
|
932
|
+
<span class="cline-any cline-yes">2x</span>
|
|
933
|
+
<span class="cline-any cline-yes">21x</span>
|
|
934
|
+
<span class="cline-any cline-no"> </span>
|
|
935
|
+
<span class="cline-any cline-no"> </span>
|
|
936
|
+
<span class="cline-any cline-no"> </span>
|
|
937
|
+
<span class="cline-any cline-no"> </span>
|
|
938
|
+
<span class="cline-any cline-no"> </span>
|
|
939
|
+
<span class="cline-any cline-yes">21x</span>
|
|
940
|
+
<span class="cline-any cline-no"> </span>
|
|
941
|
+
<span class="cline-any cline-no"> </span>
|
|
942
|
+
<span class="cline-any cline-no"> </span>
|
|
943
|
+
<span class="cline-any cline-no"> </span>
|
|
944
|
+
<span class="cline-any cline-no"> </span>
|
|
945
|
+
<span class="cline-any cline-yes">21x</span>
|
|
946
|
+
<span class="cline-any cline-no"> </span>
|
|
947
|
+
<span class="cline-any cline-no"> </span>
|
|
948
|
+
<span class="cline-any cline-no"> </span>
|
|
949
|
+
<span class="cline-any cline-no"> </span>
|
|
950
|
+
<span class="cline-any cline-no"> </span>
|
|
951
|
+
<span class="cline-any cline-yes">21x</span>
|
|
952
|
+
<span class="cline-any cline-no"> </span>
|
|
953
|
+
<span class="cline-any cline-no"> </span>
|
|
954
|
+
<span class="cline-any cline-no"> </span>
|
|
955
|
+
<span class="cline-any cline-no"> </span>
|
|
956
|
+
<span class="cline-any cline-no"> </span>
|
|
957
|
+
<span class="cline-any cline-yes">18x</span>
|
|
958
|
+
<span class="cline-any cline-yes">18x</span>
|
|
959
|
+
<span class="cline-any cline-yes">21x</span>
|
|
960
|
+
<span class="cline-any cline-no"> </span>
|
|
961
|
+
<span class="cline-any cline-no"> </span>
|
|
962
|
+
<span class="cline-any cline-no"> </span>
|
|
963
|
+
<span class="cline-any cline-no"> </span>
|
|
964
|
+
<span class="cline-any cline-no"> </span>
|
|
965
|
+
<span class="cline-any cline-yes">21x</span>
|
|
966
|
+
<span class="cline-any cline-no"> </span>
|
|
967
|
+
<span class="cline-any cline-no"> </span>
|
|
968
|
+
<span class="cline-any cline-no"> </span>
|
|
969
|
+
<span class="cline-any cline-no"> </span>
|
|
970
|
+
<span class="cline-any cline-no"> </span>
|
|
971
|
+
<span class="cline-any cline-yes">21x</span>
|
|
972
|
+
<span class="cline-any cline-no"> </span>
|
|
973
|
+
<span class="cline-any cline-no"> </span>
|
|
974
|
+
<span class="cline-any cline-no"> </span>
|
|
975
|
+
<span class="cline-any cline-no"> </span>
|
|
976
|
+
<span class="cline-any cline-no"> </span>
|
|
977
|
+
<span class="cline-any cline-yes">21x</span>
|
|
978
|
+
<span class="cline-any cline-no"> </span>
|
|
979
|
+
<span class="cline-any cline-no"> </span>
|
|
980
|
+
<span class="cline-any cline-no"> </span>
|
|
981
|
+
<span class="cline-any cline-no"> </span>
|
|
982
|
+
<span class="cline-any cline-no"> </span>
|
|
983
|
+
<span class="cline-any cline-yes">21x</span>
|
|
984
|
+
<span class="cline-any cline-yes">2x</span>
|
|
985
|
+
<span class="cline-any cline-yes">1x</span>
|
|
986
|
+
<span class="cline-any cline-yes">1x</span>
|
|
987
|
+
<span class="cline-any cline-yes">1x</span>
|
|
988
|
+
<span class="cline-any cline-yes">2x</span>
|
|
989
|
+
<span class="cline-any cline-yes">21x</span>
|
|
990
|
+
<span class="cline-any cline-no"> </span>
|
|
991
|
+
<span class="cline-any cline-no"> </span>
|
|
992
|
+
<span class="cline-any cline-no"> </span>
|
|
993
|
+
<span class="cline-any cline-no"> </span>
|
|
994
|
+
<span class="cline-any cline-no"> </span>
|
|
995
|
+
<span class="cline-any cline-yes">21x</span>
|
|
996
|
+
<span class="cline-any cline-no"> </span>
|
|
997
|
+
<span class="cline-any cline-no"> </span>
|
|
998
|
+
<span class="cline-any cline-no"> </span>
|
|
999
|
+
<span class="cline-any cline-no"> </span>
|
|
1000
|
+
<span class="cline-any cline-no"> </span>
|
|
1001
|
+
<span class="cline-any cline-yes">17x</span>
|
|
1002
|
+
<span class="cline-any cline-yes">17x</span>
|
|
1003
|
+
<span class="cline-any cline-yes">21x</span>
|
|
1004
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1005
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1006
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1007
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1008
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1009
|
+
<span class="cline-any cline-no"> </span>
|
|
1010
|
+
<span class="cline-any cline-no"> </span>
|
|
1011
|
+
<span class="cline-any cline-no"> </span>
|
|
1012
|
+
<span class="cline-any cline-no"> </span>
|
|
1013
|
+
<span class="cline-any cline-no"> </span>
|
|
1014
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1015
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1016
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1017
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1018
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1019
|
+
<span class="cline-any cline-no"> </span>
|
|
1020
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1021
|
+
<span class="cline-any cline-no"> </span>
|
|
1022
|
+
<span class="cline-any cline-no"> </span>
|
|
1023
|
+
<span class="cline-any cline-no"> </span>
|
|
1024
|
+
<span class="cline-any cline-no"> </span>
|
|
1025
|
+
<span class="cline-any cline-no"> </span>
|
|
1026
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1027
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1028
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1029
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1030
|
+
<span class="cline-any cline-no"> </span>
|
|
1031
|
+
<span class="cline-any cline-yes">16x</span>
|
|
1032
|
+
<span class="cline-any cline-yes">16x</span>
|
|
1033
|
+
<span class="cline-any cline-yes">21x</span>
|
|
1034
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1035
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1036
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1037
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1038
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1039
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1040
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1041
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1042
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1043
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1044
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1045
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1046
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1047
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1048
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1049
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1050
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1051
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1052
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1053
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1054
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1055
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1056
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1057
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1058
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1059
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1060
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1061
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1062
|
+
<span class="cline-any cline-no"> </span>
|
|
1063
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1064
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1065
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1066
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1067
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1068
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1069
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1070
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1071
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1072
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1073
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1074
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">const kanbn = require('../main');
|
|
1075
|
+
const utility = require('../utility');
|
|
1076
|
+
const inquirer = require('inquirer');
|
|
1077
|
+
const chrono = require('chrono-node');
|
|
1078
|
+
const yaml = require('yamljs');
|
|
1079
|
+
|
|
1080
|
+
inquirer.registerPrompt('recursive', require('inquirer-recursive'));
|
|
1081
|
+
|
|
1082
|
+
const searchFields = [
|
|
1083
|
+
{
|
|
1084
|
+
name: 'Id',
|
|
1085
|
+
field: 'id',
|
|
1086
|
+
type: 'string'
|
|
1087
|
+
},
|
|
1088
|
+
{
|
|
1089
|
+
name: 'Name',
|
|
1090
|
+
field: 'name',
|
|
1091
|
+
type: 'string'
|
|
1092
|
+
},
|
|
1093
|
+
{
|
|
1094
|
+
name: 'Description',
|
|
1095
|
+
field: 'description',
|
|
1096
|
+
type: 'string'
|
|
1097
|
+
},
|
|
1098
|
+
{
|
|
1099
|
+
name: 'Column',
|
|
1100
|
+
field: 'column',
|
|
1101
|
+
type: 'string'
|
|
1102
|
+
},
|
|
1103
|
+
{
|
|
1104
|
+
name: 'Created',
|
|
1105
|
+
field: 'created',
|
|
1106
|
+
type: 'date'
|
|
1107
|
+
},
|
|
1108
|
+
{
|
|
1109
|
+
name: 'Updated',
|
|
1110
|
+
field: 'updated',
|
|
1111
|
+
type: 'date'
|
|
1112
|
+
},
|
|
1113
|
+
{
|
|
1114
|
+
name: 'Started',
|
|
1115
|
+
field: 'started',
|
|
1116
|
+
type: 'date'
|
|
1117
|
+
},
|
|
1118
|
+
{
|
|
1119
|
+
name: 'Completed',
|
|
1120
|
+
field: 'completed',
|
|
1121
|
+
type: 'date'
|
|
1122
|
+
},
|
|
1123
|
+
{
|
|
1124
|
+
name: 'Due',
|
|
1125
|
+
field: 'due',
|
|
1126
|
+
type: 'date'
|
|
1127
|
+
},
|
|
1128
|
+
{
|
|
1129
|
+
name: 'Planned start',
|
|
1130
|
+
field: 'plannedStart',
|
|
1131
|
+
type: 'date'
|
|
1132
|
+
},
|
|
1133
|
+
{
|
|
1134
|
+
name: 'Planned finish',
|
|
1135
|
+
field: 'plannedFinish',
|
|
1136
|
+
type: 'date'
|
|
1137
|
+
},
|
|
1138
|
+
{
|
|
1139
|
+
name: 'Progress',
|
|
1140
|
+
field: 'progress',
|
|
1141
|
+
type: 'number'
|
|
1142
|
+
},
|
|
1143
|
+
{
|
|
1144
|
+
name: 'Sub-tasks',
|
|
1145
|
+
field: 'sub-task',
|
|
1146
|
+
type: 'string'
|
|
1147
|
+
},
|
|
1148
|
+
{
|
|
1149
|
+
name: 'Count sub-tasks',
|
|
1150
|
+
field: 'count-sub-tasks',
|
|
1151
|
+
type: 'number'
|
|
1152
|
+
},
|
|
1153
|
+
{
|
|
1154
|
+
name: 'Tags',
|
|
1155
|
+
field: 'tag',
|
|
1156
|
+
type: 'string'
|
|
1157
|
+
},
|
|
1158
|
+
{
|
|
1159
|
+
name: 'Count tags',
|
|
1160
|
+
field: 'count-tags',
|
|
1161
|
+
type: 'number'
|
|
1162
|
+
},
|
|
1163
|
+
{
|
|
1164
|
+
name: 'Relations',
|
|
1165
|
+
field: 'relation',
|
|
1166
|
+
type: 'string'
|
|
1167
|
+
},
|
|
1168
|
+
{
|
|
1169
|
+
name: 'Count relations',
|
|
1170
|
+
field: 'count-relations',
|
|
1171
|
+
type: 'number'
|
|
1172
|
+
},
|
|
1173
|
+
{
|
|
1174
|
+
name: 'Comments',
|
|
1175
|
+
field: 'comment',
|
|
1176
|
+
type: 'string'
|
|
1177
|
+
},
|
|
1178
|
+
{
|
|
1179
|
+
name: 'Count comments',
|
|
1180
|
+
field: 'count-comments',
|
|
1181
|
+
type: 'number'
|
|
1182
|
+
},
|
|
1183
|
+
{
|
|
1184
|
+
name: 'Assigned',
|
|
1185
|
+
field: 'assigned',
|
|
1186
|
+
type: 'string'
|
|
1187
|
+
}
|
|
1188
|
+
];
|
|
1189
|
+
|
|
1190
|
+
/**
|
|
1191
|
+
* Build search filters interactively
|
|
1192
|
+
* @return {Promise<any>}
|
|
1193
|
+
*/
|
|
1194
|
+
async function interactive() {
|
|
1195
|
+
return await inquirer.prompt([
|
|
1196
|
+
{
|
|
1197
|
+
type: 'recursive',
|
|
1198
|
+
name: 'filters',
|
|
1199
|
+
initialMessage: 'Add a filter?',
|
|
1200
|
+
message: 'Add another filter?',
|
|
1201
|
+
default: true,
|
|
1202
|
+
prompts: [
|
|
1203
|
+
{
|
|
1204
|
+
type: 'rawlist',
|
|
1205
|
+
name: 'type',
|
|
1206
|
+
message: 'Filter type:',
|
|
1207
|
+
default: searchFields[0].name,
|
|
1208
|
+
choices: [
|
|
1209
|
+
...searchFields.map(s => s.name),
|
|
1210
|
+
new inquirer.Separator(),
|
|
1211
|
+
'None'
|
|
1212
|
+
]
|
|
1213
|
+
},
|
|
1214
|
+
{
|
|
1215
|
+
type: 'input',
|
|
1216
|
+
name: 'value',
|
|
1217
|
+
message: 'Filter value:',
|
|
1218
|
+
default: '',
|
|
1219
|
+
when: answers => searchFields
|
|
1220
|
+
.filter(s => s.type === 'string')
|
|
1221
|
+
.map(s => s.name)
|
|
1222
|
+
.indexOf(answers.type) !== -1,
|
|
1223
|
+
validate: async value => {
|
|
1224
|
+
if (!value) {
|
|
1225
|
+
return 'Filter value cannot be empty';
|
|
1226
|
+
}
|
|
1227
|
+
return true;
|
|
1228
|
+
}
|
|
1229
|
+
},
|
|
1230
|
+
{
|
|
1231
|
+
type: 'input',
|
|
1232
|
+
name: 'value',
|
|
1233
|
+
message: 'Filter value:',
|
|
1234
|
+
default: '',
|
|
1235
|
+
when: answers => searchFields
|
|
1236
|
+
.filter(s => s.type === 'date')
|
|
1237
|
+
.map(s => s.name)
|
|
1238
|
+
.indexOf(answers.type) !== -1,
|
|
1239
|
+
validate: async value => {
|
|
1240
|
+
if (!value) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1241
|
+
<span class="cstat-no" title="statement not covered" > return 'Filter value cannot be empty';</span>
|
|
1242
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1243
|
+
if (chrono.parseDate(value) === null) {
|
|
1244
|
+
return 'Unable to parse date';
|
|
1245
|
+
}
|
|
1246
|
+
<span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" > return true;</span></span>
|
|
1247
|
+
}
|
|
1248
|
+
},
|
|
1249
|
+
{
|
|
1250
|
+
type: 'input',
|
|
1251
|
+
name: 'value',
|
|
1252
|
+
message: 'Filter value:',
|
|
1253
|
+
default: '',
|
|
1254
|
+
when: answers => searchFields
|
|
1255
|
+
.filter(s => s.type === 'number')
|
|
1256
|
+
.map(s => s.name)
|
|
1257
|
+
.indexOf(answers.type) !== -1,
|
|
1258
|
+
validate: async value => {
|
|
1259
|
+
if (!value) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1260
|
+
<span class="cstat-no" title="statement not covered" > return 'Filter value cannot be empty';</span>
|
|
1261
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1262
|
+
if (isNaN(value)) {
|
|
1263
|
+
return 'Filter value must be numeric';
|
|
1264
|
+
}
|
|
1265
|
+
<span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" > return true;</span></span>
|
|
1266
|
+
}
|
|
1267
|
+
},
|
|
1268
|
+
{
|
|
1269
|
+
type: 'confirm',
|
|
1270
|
+
name: 'value',
|
|
1271
|
+
message: 'Filter value:',
|
|
1272
|
+
default: true,
|
|
1273
|
+
when: answers => searchFields
|
|
1274
|
+
.filter(s => s.type === 'boolean')
|
|
1275
|
+
.map(s => s.name)
|
|
1276
|
+
.indexOf(answers.type) !== -1
|
|
1277
|
+
}
|
|
1278
|
+
]
|
|
1279
|
+
}
|
|
1280
|
+
]);
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
/**
|
|
1284
|
+
* Search tasks
|
|
1285
|
+
* @param {object} filters
|
|
1286
|
+
* @param {boolean} quiet
|
|
1287
|
+
* @param {boolean} json
|
|
1288
|
+
*/
|
|
1289
|
+
function findTasks(filters, quiet, json) {
|
|
1290
|
+
const removeEmptyProperties = o => Object.fromEntries(Object.entries(o).filter(
|
|
1291
|
+
([k, v]) => !(Array.isArray(v) <span class="branch-0 cbranch-no" title="branch not covered" >&& v.length == 0)</span> && !!v
|
|
1292
|
+
));
|
|
1293
|
+
kanbn
|
|
1294
|
+
.search(filters, quiet)
|
|
1295
|
+
.then(results => {
|
|
1296
|
+
if (quiet) {
|
|
1297
|
+
console.log(json ? JSON.stringify(results, null, 2) : results.join('\n'));
|
|
1298
|
+
} else {
|
|
1299
|
+
if (json) {
|
|
1300
|
+
console.log(JSON.stringify(results, null, 2));
|
|
1301
|
+
} else {
|
|
1302
|
+
console.log(`Found ${results.length} task${results.length === 1 ? '' : 's'}`);
|
|
1303
|
+
if (results.length > 0) {
|
|
1304
|
+
console.log('---');
|
|
1305
|
+
}
|
|
1306
|
+
console.log(results.map(result => yaml.stringify(removeEmptyProperties(result), 4, 2).trim()).join('\n---\n'));
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
})
|
|
1310
|
+
.catch(error => {
|
|
1311
|
+
<span class="cstat-no" title="statement not covered" > utility.error(error);</span>
|
|
1312
|
+
});
|
|
1313
|
+
}
|
|
1314
|
+
|
|
1315
|
+
/**
|
|
1316
|
+
* Add a filter to the filters object without over-writing any existing filters
|
|
1317
|
+
* @param {object} filters The current filter object
|
|
1318
|
+
* @param {string} filterName The property name for the filter
|
|
1319
|
+
* @param {string} filterValue The filter value
|
|
1320
|
+
*/
|
|
1321
|
+
function addFilterValue(filters, filterName, filterValue) {
|
|
1322
|
+
if (filters[filterName]) {
|
|
1323
|
+
if (Array.isArray(filters[filterName])) {
|
|
1324
|
+
filters[filterName].push(filterValue);
|
|
1325
|
+
} else {
|
|
1326
|
+
filters[filterName] = [filters[filterName], filterValue];
|
|
1327
|
+
}
|
|
1328
|
+
} else {
|
|
1329
|
+
filters[filterName] = filterValue;
|
|
1330
|
+
}
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
/**
|
|
1334
|
+
* Convert a filter or array of filters to numeric values
|
|
1335
|
+
* @param {object} filters The current filter object
|
|
1336
|
+
* @param {string} filterName The property name for the filter
|
|
1337
|
+
* @return {boolean} True if all values could be converted
|
|
1338
|
+
*/
|
|
1339
|
+
function convertNumericFilters(filters, filterName) {
|
|
1340
|
+
if (Array.isArray(filters[filterName])) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1341
|
+
<span class="cstat-no" title="statement not covered" > for (let i = 0; i < filters[filterName].length; i++) {</span>
|
|
1342
|
+
<span class="cstat-no" title="statement not covered" > const numericValue = parseInt(filters[filterName][i]);</span>
|
|
1343
|
+
<span class="cstat-no" title="statement not covered" > if (isNaN(numericValue)) {</span>
|
|
1344
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1345
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1346
|
+
<span class="cstat-no" title="statement not covered" > filters[filterName][i] = numericValue;</span>
|
|
1347
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1348
|
+
} else {
|
|
1349
|
+
const numericValue = parseInt(filters[filterName]);
|
|
1350
|
+
if (isNaN(numericValue)) {
|
|
1351
|
+
return false;
|
|
1352
|
+
}
|
|
1353
|
+
filters[filterName] = numericValue;
|
|
1354
|
+
}
|
|
1355
|
+
return true;
|
|
1356
|
+
}
|
|
1357
|
+
|
|
1358
|
+
/**
|
|
1359
|
+
* Convert a filter or array of filters to date values
|
|
1360
|
+
* @param {object} filters The current filter object
|
|
1361
|
+
* @param {string} filterName The property name for the filter
|
|
1362
|
+
* @return {boolean} True if all values could be converted
|
|
1363
|
+
*/
|
|
1364
|
+
function convertDateFilters(filters, filterName) {
|
|
1365
|
+
if (Array.isArray(filters[filterName])) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1366
|
+
<span class="cstat-no" title="statement not covered" > for (let i = 0; i < filters[filterName].length; i++) {</span>
|
|
1367
|
+
<span class="cstat-no" title="statement not covered" > const dateValue = chrono.parseDate(filters[filterName][i]);</span>
|
|
1368
|
+
<span class="cstat-no" title="statement not covered" > if (dateValue === null) {</span>
|
|
1369
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1370
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1371
|
+
<span class="cstat-no" title="statement not covered" > filters[filterName][i] = dateValue;</span>
|
|
1372
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1373
|
+
} else {
|
|
1374
|
+
const dateValue = chrono.parseDate(filters[filterName]);
|
|
1375
|
+
if (dateValue === null) {
|
|
1376
|
+
return false;
|
|
1377
|
+
}
|
|
1378
|
+
filters[filterName] = dateValue;
|
|
1379
|
+
}
|
|
1380
|
+
return true;
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
module.exports = async args => {
|
|
1384
|
+
|
|
1385
|
+
// Make sure kanbn has been initialised
|
|
1386
|
+
if (!await kanbn.initialised()) {
|
|
1387
|
+
utility.error('Kanbn has not been initialised in this folder\nTry running: {b}kanbn init{b}');
|
|
1388
|
+
return;
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
// Get the index and make sure it has some columns
|
|
1392
|
+
let index;
|
|
1393
|
+
try {
|
|
1394
|
+
index = await kanbn.getIndex();
|
|
1395
|
+
} <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
|
|
1396
|
+
<span class="cstat-no" title="statement not covered" > utility.error(error);</span>
|
|
1397
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1398
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1399
|
+
const columnNames = Object.keys(index.columns);
|
|
1400
|
+
if (!columnNames.length) {
|
|
1401
|
+
utility.error('No columns defined in the index\nTry running {b}kanbn init -c "column name"{b}');
|
|
1402
|
+
return;
|
|
1403
|
+
}
|
|
1404
|
+
|
|
1405
|
+
// Add custom fields to search fields
|
|
1406
|
+
if ('customFields' in index.options) {
|
|
1407
|
+
for (let customField of index.options.customFields) {
|
|
1408
|
+
searchFields.push({
|
|
1409
|
+
name: customField.name,
|
|
1410
|
+
field: customField.name,
|
|
1411
|
+
type: customField.type
|
|
1412
|
+
});
|
|
1413
|
+
}
|
|
1414
|
+
}
|
|
1415
|
+
|
|
1416
|
+
// Get filters from args
|
|
1417
|
+
const filters = {};
|
|
1418
|
+
for (let filterProperty of searchFields.map(s => s.field)) {
|
|
1419
|
+
if (args[filterProperty]) {
|
|
1420
|
+
filters[filterProperty] = args[filterProperty];
|
|
1421
|
+
}
|
|
1422
|
+
}
|
|
1423
|
+
|
|
1424
|
+
// Check and convert numeric filters
|
|
1425
|
+
if ('count-sub-tasks' in filters) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1426
|
+
<span class="cstat-no" title="statement not covered" > if (!convertNumericFilters(filters, 'count-sub-tasks')) {</span>
|
|
1427
|
+
<span class="cstat-no" title="statement not covered" > utility.error('Count sub-tasks filter value must be numeric');</span>
|
|
1428
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1429
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1430
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1431
|
+
if ('count-tags' in filters) {
|
|
1432
|
+
if (!convertNumericFilters(filters, 'count-tags')) {
|
|
1433
|
+
utility.error('Count tags filter value must be numeric');
|
|
1434
|
+
return;
|
|
1435
|
+
}
|
|
1436
|
+
}
|
|
1437
|
+
if ('count-relations' in filters) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1438
|
+
<span class="cstat-no" title="statement not covered" > if (!convertNumericFilters(filters, 'count-relations')) {</span>
|
|
1439
|
+
<span class="cstat-no" title="statement not covered" > utility.error('Count relations filter value must be numeric');</span>
|
|
1440
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1441
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1442
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1443
|
+
if ('count-comments' in filters) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1444
|
+
<span class="cstat-no" title="statement not covered" > if (!convertNumericFilters(filters, 'count-comments')) {</span>
|
|
1445
|
+
<span class="cstat-no" title="statement not covered" > utility.error('Count comments filter value must be numeric');</span>
|
|
1446
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1447
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1448
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1449
|
+
if ('workload' in filters)<span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1450
|
+
<span class="cstat-no" title="statement not covered" > if (!convertNumericFilters(filters, 'workload')) {</span>
|
|
1451
|
+
<span class="cstat-no" title="statement not covered" > utility.error('Workload filter value must be numeric');</span>
|
|
1452
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1453
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1454
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1455
|
+
if ('progress' in filters)<span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1456
|
+
<span class="cstat-no" title="statement not covered" > if (!convertNumericFilters(filters, 'progress')) {</span>
|
|
1457
|
+
<span class="cstat-no" title="statement not covered" > utility.error('Progress filter value must be numeric');</span>
|
|
1458
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1459
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1460
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1461
|
+
|
|
1462
|
+
// Check date filters
|
|
1463
|
+
if ('created' in filters) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1464
|
+
<span class="cstat-no" title="statement not covered" > if (!convertDateFilters(filters, 'created')) {</span>
|
|
1465
|
+
<span class="cstat-no" title="statement not covered" > utility.error('Unable to parse created date');</span>
|
|
1466
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1467
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1468
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1469
|
+
if ('updated' in filters) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1470
|
+
<span class="cstat-no" title="statement not covered" > if (!convertDateFilters(filters, 'updated')) {</span>
|
|
1471
|
+
<span class="cstat-no" title="statement not covered" > utility.error('Unable to parse updated date');</span>
|
|
1472
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1473
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1474
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1475
|
+
if ('started' in filters) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1476
|
+
<span class="cstat-no" title="statement not covered" > if (!convertDateFilters(filters, 'started')) {</span>
|
|
1477
|
+
<span class="cstat-no" title="statement not covered" > utility.error('Unable to parse started date');</span>
|
|
1478
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1479
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1480
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1481
|
+
if ('completed' in filters) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1482
|
+
<span class="cstat-no" title="statement not covered" > if (!convertDateFilters(filters, 'completed')) {</span>
|
|
1483
|
+
<span class="cstat-no" title="statement not covered" > utility.error('Unable to parse completed date');</span>
|
|
1484
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1485
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1486
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1487
|
+
if ('due' in filters) {
|
|
1488
|
+
if (!convertDateFilters(filters, 'due')) {
|
|
1489
|
+
utility.error('Unable to parse due date');
|
|
1490
|
+
return;
|
|
1491
|
+
}
|
|
1492
|
+
}
|
|
1493
|
+
if ('plannedStart' in filters) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1494
|
+
<span class="cstat-no" title="statement not covered" > if (!convertDateFilters(filters, 'plannedStart')) {</span>
|
|
1495
|
+
<span class="cstat-no" title="statement not covered" > utility.error('Unable to parse plannedStart date');</span>
|
|
1496
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1497
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1498
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1499
|
+
if ('plannedFinish' in filters) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1500
|
+
<span class="cstat-no" title="statement not covered" > if (!convertDateFilters(filters, 'plannedFinish')) {</span>
|
|
1501
|
+
<span class="cstat-no" title="statement not covered" > utility.error('Unable to parse plannedFinish date');</span>
|
|
1502
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1503
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1504
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1505
|
+
|
|
1506
|
+
// Check and add custom field filters
|
|
1507
|
+
if ('customFields' in index.options) {
|
|
1508
|
+
for (let customField of index.options.customFields) {
|
|
1509
|
+
if (customField.name in args) {
|
|
1510
|
+
filters[customField.name] = args[customField.name];
|
|
1511
|
+
switch (customField.type) {
|
|
1512
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > case 'boolean':</span>
|
|
1513
|
+
<span class="cstat-no" title="statement not covered" > if (typeof filters[customField.name] !== 'boolean') {</span>
|
|
1514
|
+
<span class="cstat-no" title="statement not covered" > utility.error(`Custom field "${customField.name}" value is not a boolean`);</span>
|
|
1515
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1516
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1517
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1518
|
+
case 'number':
|
|
1519
|
+
if (!convertNumericFilters(filters, customField.name)) {
|
|
1520
|
+
utility.error(`Custom field "${customField.name}" value is not a number`);
|
|
1521
|
+
return;
|
|
1522
|
+
}
|
|
1523
|
+
<span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" > break;</span></span>
|
|
1524
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > case 'date':</span>
|
|
1525
|
+
<span class="cstat-no" title="statement not covered" > if (!convertDateFilters(filters, customField.name)) {</span>
|
|
1526
|
+
<span class="cstat-no" title="statement not covered" > utility.error(`Unable to parse date for custom field "${customField.name}"`);</span>
|
|
1527
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1528
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1529
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1530
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > default: break;</span>
|
|
1531
|
+
}
|
|
1532
|
+
}
|
|
1533
|
+
}
|
|
1534
|
+
<span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" > }</span></span>
|
|
1535
|
+
|
|
1536
|
+
// Build search filters interactively
|
|
1537
|
+
if (args.interactive) {
|
|
1538
|
+
interactive()
|
|
1539
|
+
.then(answers => {
|
|
1540
|
+
inquirer
|
|
1541
|
+
.prompt([
|
|
1542
|
+
{
|
|
1543
|
+
type: 'confirm',
|
|
1544
|
+
name: 'nonquiet',
|
|
1545
|
+
message: 'Show full task details in results?',
|
|
1546
|
+
default: !args.quiet
|
|
1547
|
+
},
|
|
1548
|
+
{
|
|
1549
|
+
type: 'confirm',
|
|
1550
|
+
name: 'json',
|
|
1551
|
+
message: 'Show results in JSON format?',
|
|
1552
|
+
default: !!args.json
|
|
1553
|
+
}
|
|
1554
|
+
])
|
|
1555
|
+
.then(otherAnswers => {
|
|
1556
|
+
for (let filter of answers.filters) {
|
|
1557
|
+
addFilterValue(
|
|
1558
|
+
filters,
|
|
1559
|
+
searchFields.find(s => s.name === filter.type).field,
|
|
1560
|
+
filter.value
|
|
1561
|
+
);
|
|
1562
|
+
}
|
|
1563
|
+
findTasks(filters, !otherAnswers.nonquiet, otherAnswers.json);
|
|
1564
|
+
})
|
|
1565
|
+
.catch(error => {
|
|
1566
|
+
<span class="cstat-no" title="statement not covered" > utility.error(error);</span>
|
|
1567
|
+
});
|
|
1568
|
+
})
|
|
1569
|
+
.catch(error => {
|
|
1570
|
+
utility.error(error);
|
|
1571
|
+
});
|
|
1572
|
+
|
|
1573
|
+
// Otherwise create task non-interactively
|
|
1574
|
+
} else {
|
|
1575
|
+
findTasks(filters, args.quiet, args.json);
|
|
1576
|
+
}
|
|
1577
|
+
};
|
|
1578
|
+
</pre></td></tr></table></pre>
|
|
1579
|
+
|
|
1580
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1581
|
+
</div><!-- /wrapper -->
|
|
1582
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1583
|
+
Code coverage generated by
|
|
1584
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1585
|
+
at 2026-08-26T20:46:31.702Z
|
|
1586
|
+
</div>
|
|
1587
|
+
<script src="../../../prettify.js"></script>
|
|
1588
|
+
<script>
|
|
1589
|
+
window.onload = function () {
|
|
1590
|
+
prettyPrint();
|
|
1591
|
+
};
|
|
1592
|
+
</script>
|
|
1593
|
+
<script src="../../../sorter.js"></script>
|
|
1594
|
+
<script src="../../../block-navigation.js"></script>
|
|
1595
|
+
</body>
|
|
1596
|
+
</html>
|
|
1597
|
+
|