@contractkit/plugin-python 0.11.6 → 0.11.7

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.
@@ -1,2071 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/codegen-client.ts</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">src</a> codegen-client.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">82.6% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>266/322</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">77.92% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>180/231</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">86.48% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>32/37</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">83.33% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>235/282</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>
571
- <a name='L506'></a><a href='#L506'>506</a>
572
- <a name='L507'></a><a href='#L507'>507</a>
573
- <a name='L508'></a><a href='#L508'>508</a>
574
- <a name='L509'></a><a href='#L509'>509</a>
575
- <a name='L510'></a><a href='#L510'>510</a>
576
- <a name='L511'></a><a href='#L511'>511</a>
577
- <a name='L512'></a><a href='#L512'>512</a>
578
- <a name='L513'></a><a href='#L513'>513</a>
579
- <a name='L514'></a><a href='#L514'>514</a>
580
- <a name='L515'></a><a href='#L515'>515</a>
581
- <a name='L516'></a><a href='#L516'>516</a>
582
- <a name='L517'></a><a href='#L517'>517</a>
583
- <a name='L518'></a><a href='#L518'>518</a>
584
- <a name='L519'></a><a href='#L519'>519</a>
585
- <a name='L520'></a><a href='#L520'>520</a>
586
- <a name='L521'></a><a href='#L521'>521</a>
587
- <a name='L522'></a><a href='#L522'>522</a>
588
- <a name='L523'></a><a href='#L523'>523</a>
589
- <a name='L524'></a><a href='#L524'>524</a>
590
- <a name='L525'></a><a href='#L525'>525</a>
591
- <a name='L526'></a><a href='#L526'>526</a>
592
- <a name='L527'></a><a href='#L527'>527</a>
593
- <a name='L528'></a><a href='#L528'>528</a>
594
- <a name='L529'></a><a href='#L529'>529</a>
595
- <a name='L530'></a><a href='#L530'>530</a>
596
- <a name='L531'></a><a href='#L531'>531</a>
597
- <a name='L532'></a><a href='#L532'>532</a>
598
- <a name='L533'></a><a href='#L533'>533</a>
599
- <a name='L534'></a><a href='#L534'>534</a>
600
- <a name='L535'></a><a href='#L535'>535</a>
601
- <a name='L536'></a><a href='#L536'>536</a>
602
- <a name='L537'></a><a href='#L537'>537</a>
603
- <a name='L538'></a><a href='#L538'>538</a>
604
- <a name='L539'></a><a href='#L539'>539</a>
605
- <a name='L540'></a><a href='#L540'>540</a>
606
- <a name='L541'></a><a href='#L541'>541</a>
607
- <a name='L542'></a><a href='#L542'>542</a>
608
- <a name='L543'></a><a href='#L543'>543</a>
609
- <a name='L544'></a><a href='#L544'>544</a>
610
- <a name='L545'></a><a href='#L545'>545</a>
611
- <a name='L546'></a><a href='#L546'>546</a>
612
- <a name='L547'></a><a href='#L547'>547</a>
613
- <a name='L548'></a><a href='#L548'>548</a>
614
- <a name='L549'></a><a href='#L549'>549</a>
615
- <a name='L550'></a><a href='#L550'>550</a>
616
- <a name='L551'></a><a href='#L551'>551</a>
617
- <a name='L552'></a><a href='#L552'>552</a>
618
- <a name='L553'></a><a href='#L553'>553</a>
619
- <a name='L554'></a><a href='#L554'>554</a>
620
- <a name='L555'></a><a href='#L555'>555</a>
621
- <a name='L556'></a><a href='#L556'>556</a>
622
- <a name='L557'></a><a href='#L557'>557</a>
623
- <a name='L558'></a><a href='#L558'>558</a>
624
- <a name='L559'></a><a href='#L559'>559</a>
625
- <a name='L560'></a><a href='#L560'>560</a>
626
- <a name='L561'></a><a href='#L561'>561</a>
627
- <a name='L562'></a><a href='#L562'>562</a>
628
- <a name='L563'></a><a href='#L563'>563</a>
629
- <a name='L564'></a><a href='#L564'>564</a>
630
- <a name='L565'></a><a href='#L565'>565</a>
631
- <a name='L566'></a><a href='#L566'>566</a>
632
- <a name='L567'></a><a href='#L567'>567</a>
633
- <a name='L568'></a><a href='#L568'>568</a>
634
- <a name='L569'></a><a href='#L569'>569</a>
635
- <a name='L570'></a><a href='#L570'>570</a>
636
- <a name='L571'></a><a href='#L571'>571</a>
637
- <a name='L572'></a><a href='#L572'>572</a>
638
- <a name='L573'></a><a href='#L573'>573</a>
639
- <a name='L574'></a><a href='#L574'>574</a>
640
- <a name='L575'></a><a href='#L575'>575</a>
641
- <a name='L576'></a><a href='#L576'>576</a>
642
- <a name='L577'></a><a href='#L577'>577</a>
643
- <a name='L578'></a><a href='#L578'>578</a>
644
- <a name='L579'></a><a href='#L579'>579</a>
645
- <a name='L580'></a><a href='#L580'>580</a>
646
- <a name='L581'></a><a href='#L581'>581</a>
647
- <a name='L582'></a><a href='#L582'>582</a>
648
- <a name='L583'></a><a href='#L583'>583</a>
649
- <a name='L584'></a><a href='#L584'>584</a>
650
- <a name='L585'></a><a href='#L585'>585</a>
651
- <a name='L586'></a><a href='#L586'>586</a>
652
- <a name='L587'></a><a href='#L587'>587</a>
653
- <a name='L588'></a><a href='#L588'>588</a>
654
- <a name='L589'></a><a href='#L589'>589</a>
655
- <a name='L590'></a><a href='#L590'>590</a>
656
- <a name='L591'></a><a href='#L591'>591</a>
657
- <a name='L592'></a><a href='#L592'>592</a>
658
- <a name='L593'></a><a href='#L593'>593</a>
659
- <a name='L594'></a><a href='#L594'>594</a>
660
- <a name='L595'></a><a href='#L595'>595</a>
661
- <a name='L596'></a><a href='#L596'>596</a>
662
- <a name='L597'></a><a href='#L597'>597</a>
663
- <a name='L598'></a><a href='#L598'>598</a>
664
- <a name='L599'></a><a href='#L599'>599</a>
665
- <a name='L600'></a><a href='#L600'>600</a>
666
- <a name='L601'></a><a href='#L601'>601</a>
667
- <a name='L602'></a><a href='#L602'>602</a>
668
- <a name='L603'></a><a href='#L603'>603</a>
669
- <a name='L604'></a><a href='#L604'>604</a>
670
- <a name='L605'></a><a href='#L605'>605</a>
671
- <a name='L606'></a><a href='#L606'>606</a>
672
- <a name='L607'></a><a href='#L607'>607</a>
673
- <a name='L608'></a><a href='#L608'>608</a>
674
- <a name='L609'></a><a href='#L609'>609</a>
675
- <a name='L610'></a><a href='#L610'>610</a>
676
- <a name='L611'></a><a href='#L611'>611</a>
677
- <a name='L612'></a><a href='#L612'>612</a>
678
- <a name='L613'></a><a href='#L613'>613</a>
679
- <a name='L614'></a><a href='#L614'>614</a>
680
- <a name='L615'></a><a href='#L615'>615</a>
681
- <a name='L616'></a><a href='#L616'>616</a>
682
- <a name='L617'></a><a href='#L617'>617</a>
683
- <a name='L618'></a><a href='#L618'>618</a>
684
- <a name='L619'></a><a href='#L619'>619</a>
685
- <a name='L620'></a><a href='#L620'>620</a>
686
- <a name='L621'></a><a href='#L621'>621</a>
687
- <a name='L622'></a><a href='#L622'>622</a>
688
- <a name='L623'></a><a href='#L623'>623</a>
689
- <a name='L624'></a><a href='#L624'>624</a>
690
- <a name='L625'></a><a href='#L625'>625</a>
691
- <a name='L626'></a><a href='#L626'>626</a>
692
- <a name='L627'></a><a href='#L627'>627</a>
693
- <a name='L628'></a><a href='#L628'>628</a>
694
- <a name='L629'></a><a href='#L629'>629</a>
695
- <a name='L630'></a><a href='#L630'>630</a>
696
- <a name='L631'></a><a href='#L631'>631</a>
697
- <a name='L632'></a><a href='#L632'>632</a>
698
- <a name='L633'></a><a href='#L633'>633</a>
699
- <a name='L634'></a><a href='#L634'>634</a>
700
- <a name='L635'></a><a href='#L635'>635</a>
701
- <a name='L636'></a><a href='#L636'>636</a>
702
- <a name='L637'></a><a href='#L637'>637</a>
703
- <a name='L638'></a><a href='#L638'>638</a>
704
- <a name='L639'></a><a href='#L639'>639</a>
705
- <a name='L640'></a><a href='#L640'>640</a>
706
- <a name='L641'></a><a href='#L641'>641</a>
707
- <a name='L642'></a><a href='#L642'>642</a>
708
- <a name='L643'></a><a href='#L643'>643</a>
709
- <a name='L644'></a><a href='#L644'>644</a>
710
- <a name='L645'></a><a href='#L645'>645</a>
711
- <a name='L646'></a><a href='#L646'>646</a>
712
- <a name='L647'></a><a href='#L647'>647</a>
713
- <a name='L648'></a><a href='#L648'>648</a>
714
- <a name='L649'></a><a href='#L649'>649</a>
715
- <a name='L650'></a><a href='#L650'>650</a>
716
- <a name='L651'></a><a href='#L651'>651</a>
717
- <a name='L652'></a><a href='#L652'>652</a>
718
- <a name='L653'></a><a href='#L653'>653</a>
719
- <a name='L654'></a><a href='#L654'>654</a>
720
- <a name='L655'></a><a href='#L655'>655</a>
721
- <a name='L656'></a><a href='#L656'>656</a>
722
- <a name='L657'></a><a href='#L657'>657</a>
723
- <a name='L658'></a><a href='#L658'>658</a>
724
- <a name='L659'></a><a href='#L659'>659</a>
725
- <a name='L660'></a><a href='#L660'>660</a>
726
- <a name='L661'></a><a href='#L661'>661</a>
727
- <a name='L662'></a><a href='#L662'>662</a>
728
- <a name='L663'></a><a href='#L663'>663</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
729
- <span class="cline-any cline-neutral">&nbsp;</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-neutral">&nbsp;</span>
732
- <span class="cline-any cline-neutral">&nbsp;</span>
733
- <span class="cline-any cline-neutral">&nbsp;</span>
734
- <span class="cline-any cline-neutral">&nbsp;</span>
735
- <span class="cline-any cline-neutral">&nbsp;</span>
736
- <span class="cline-any cline-neutral">&nbsp;</span>
737
- <span class="cline-any cline-neutral">&nbsp;</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-neutral">&nbsp;</span>
741
- <span class="cline-any cline-neutral">&nbsp;</span>
742
- <span class="cline-any cline-neutral">&nbsp;</span>
743
- <span class="cline-any cline-neutral">&nbsp;</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-neutral">&nbsp;</span>
747
- <span class="cline-any cline-neutral">&nbsp;</span>
748
- <span class="cline-any cline-neutral">&nbsp;</span>
749
- <span class="cline-any cline-neutral">&nbsp;</span>
750
- <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-neutral">&nbsp;</span>
752
- <span class="cline-any cline-neutral">&nbsp;</span>
753
- <span class="cline-any cline-neutral">&nbsp;</span>
754
- <span class="cline-any cline-neutral">&nbsp;</span>
755
- <span class="cline-any cline-yes">2x</span>
756
- <span class="cline-any cline-yes">2x</span>
757
- <span class="cline-any cline-yes">2x</span>
758
- <span class="cline-any cline-neutral">&nbsp;</span>
759
- <span class="cline-any cline-neutral">&nbsp;</span>
760
- <span class="cline-any cline-yes">1x</span>
761
- <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-neutral">&nbsp;</span>
763
- <span class="cline-any cline-neutral">&nbsp;</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-neutral">&nbsp;</span>
766
- <span class="cline-any cline-neutral">&nbsp;</span>
767
- <span class="cline-any cline-yes">25x</span>
768
- <span class="cline-any cline-yes">25x</span>
769
- <span class="cline-any cline-yes">25x</span>
770
- <span class="cline-any cline-neutral">&nbsp;</span>
771
- <span class="cline-any cline-neutral">&nbsp;</span>
772
- <span class="cline-any cline-yes">25x</span>
773
- <span class="cline-any cline-neutral">&nbsp;</span>
774
- <span class="cline-any cline-yes">25x</span>
775
- <span class="cline-any cline-yes">25x</span>
776
- <span class="cline-any cline-yes">25x</span>
777
- <span class="cline-any cline-yes">25x</span>
778
- <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-yes">25x</span>
781
- <span class="cline-any cline-yes">25x</span>
782
- <span class="cline-any cline-yes">25x</span>
783
- <span class="cline-any cline-yes">25x</span>
784
- <span class="cline-any cline-yes">25x</span>
785
- <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-yes">25x</span>
787
- <span class="cline-any cline-no">&nbsp;</span>
788
- <span class="cline-any cline-no">&nbsp;</span>
789
- <span class="cline-any cline-no">&nbsp;</span>
790
- <span class="cline-any cline-no">&nbsp;</span>
791
- <span class="cline-any cline-no">&nbsp;</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-yes">25x</span>
794
- <span class="cline-any cline-neutral">&nbsp;</span>
795
- <span class="cline-any cline-neutral">&nbsp;</span>
796
- <span class="cline-any cline-yes">25x</span>
797
- <span class="cline-any cline-yes">25x</span>
798
- <span class="cline-any cline-yes">30x</span>
799
- <span class="cline-any cline-yes">30x</span>
800
- <span class="cline-any cline-yes">28x</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-yes">25x</span>
804
- <span class="cline-any cline-yes">28x</span>
805
- <span class="cline-any cline-yes">28x</span>
806
- <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-neutral">&nbsp;</span>
808
- <span class="cline-any cline-yes">25x</span>
809
- <span class="cline-any cline-yes">2x</span>
810
- <span class="cline-any cline-yes">2x</span>
811
- <span class="cline-any cline-yes">2x</span>
812
- <span class="cline-any cline-yes">2x</span>
813
- <span class="cline-any cline-neutral">&nbsp;</span>
814
- <span class="cline-any cline-yes">25x</span>
815
- <span class="cline-any cline-neutral">&nbsp;</span>
816
- <span class="cline-any cline-neutral">&nbsp;</span>
817
- <span class="cline-any cline-yes">25x</span>
818
- <span class="cline-any cline-yes">25x</span>
819
- <span class="cline-any cline-yes">35x</span>
820
- <span class="cline-any cline-yes">26x</span>
821
- <span class="cline-any cline-yes">35x</span>
822
- <span class="cline-any cline-yes">2x</span>
823
- <span class="cline-any cline-yes">2x</span>
824
- <span class="cline-any cline-yes">1x</span>
825
- <span class="cline-any cline-yes">1x</span>
826
- <span class="cline-any cline-neutral">&nbsp;</span>
827
- <span class="cline-any cline-yes">2x</span>
828
- <span class="cline-any cline-neutral">&nbsp;</span>
829
- <span class="cline-any cline-neutral">&nbsp;</span>
830
- <span class="cline-any cline-yes">25x</span>
831
- <span class="cline-any cline-yes">1x</span>
832
- <span class="cline-any cline-yes">1x</span>
833
- <span class="cline-any cline-neutral">&nbsp;</span>
834
- <span class="cline-any cline-neutral">&nbsp;</span>
835
- <span class="cline-any cline-neutral">&nbsp;</span>
836
- <span class="cline-any cline-yes">25x</span>
837
- <span class="cline-any cline-yes">2x</span>
838
- <span class="cline-any cline-yes">2x</span>
839
- <span class="cline-any cline-yes">2x</span>
840
- <span class="cline-any cline-yes">2x</span>
841
- <span class="cline-any cline-yes">2x</span>
842
- <span class="cline-any cline-yes">2x</span>
843
- <span class="cline-any cline-yes">3x</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-neutral">&nbsp;</span>
847
- <span class="cline-any cline-neutral">&nbsp;</span>
848
- <span class="cline-any cline-neutral">&nbsp;</span>
849
- <span class="cline-any cline-yes">25x</span>
850
- <span class="cline-any cline-yes">25x</span>
851
- <span class="cline-any cline-yes">25x</span>
852
- <span class="cline-any cline-neutral">&nbsp;</span>
853
- <span class="cline-any cline-yes">25x</span>
854
- <span class="cline-any cline-yes">25x</span>
855
- <span class="cline-any cline-yes">30x</span>
856
- <span class="cline-any cline-yes">30x</span>
857
- <span class="cline-any cline-yes">30x</span>
858
- <span class="cline-any cline-yes">28x</span>
859
- <span class="cline-any cline-yes">28x</span>
860
- <span class="cline-any cline-yes">28x</span>
861
- <span class="cline-any cline-yes">28x</span>
862
- <span class="cline-any cline-neutral">&nbsp;</span>
863
- <span class="cline-any cline-neutral">&nbsp;</span>
864
- <span class="cline-any cline-neutral">&nbsp;</span>
865
- <span class="cline-any cline-yes">25x</span>
866
- <span class="cline-any cline-no">&nbsp;</span>
867
- <span class="cline-any cline-neutral">&nbsp;</span>
868
- <span class="cline-any cline-neutral">&nbsp;</span>
869
- <span class="cline-any cline-yes">25x</span>
870
- <span class="cline-any cline-neutral">&nbsp;</span>
871
- <span class="cline-any cline-yes">25x</span>
872
- <span class="cline-any cline-neutral">&nbsp;</span>
873
- <span class="cline-any cline-neutral">&nbsp;</span>
874
- <span class="cline-any cline-neutral">&nbsp;</span>
875
- <span class="cline-any cline-neutral">&nbsp;</span>
876
- <span class="cline-any cline-neutral">&nbsp;</span>
877
- <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-neutral">&nbsp;</span>
879
- <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-neutral">&nbsp;</span>
881
- <span class="cline-any cline-neutral">&nbsp;</span>
882
- <span class="cline-any cline-neutral">&nbsp;</span>
883
- <span class="cline-any cline-neutral">&nbsp;</span>
884
- <span class="cline-any cline-yes">28x</span>
885
- <span class="cline-any cline-yes">28x</span>
886
- <span class="cline-any cline-yes">28x</span>
887
- <span class="cline-any cline-yes">28x</span>
888
- <span class="cline-any cline-neutral">&nbsp;</span>
889
- <span class="cline-any cline-yes">28x</span>
890
- <span class="cline-any cline-yes">28x</span>
891
- <span class="cline-any cline-yes">28x</span>
892
- <span class="cline-any cline-yes">17x</span>
893
- <span class="cline-any cline-yes">16x</span>
894
- <span class="cline-any cline-neutral">&nbsp;</span>
895
- <span class="cline-any cline-yes">28x</span>
896
- <span class="cline-any cline-neutral">&nbsp;</span>
897
- <span class="cline-any cline-neutral">&nbsp;</span>
898
- <span class="cline-any cline-yes">28x</span>
899
- <span class="cline-any cline-yes">28x</span>
900
- <span class="cline-any cline-yes">28x</span>
901
- <span class="cline-any cline-yes">28x</span>
902
- <span class="cline-any cline-neutral">&nbsp;</span>
903
- <span class="cline-any cline-neutral">&nbsp;</span>
904
- <span class="cline-any cline-neutral">&nbsp;</span>
905
- <span class="cline-any cline-neutral">&nbsp;</span>
906
- <span class="cline-any cline-neutral">&nbsp;</span>
907
- <span class="cline-any cline-neutral">&nbsp;</span>
908
- <span class="cline-any cline-yes">28x</span>
909
- <span class="cline-any cline-yes">28x</span>
910
- <span class="cline-any cline-yes">28x</span>
911
- <span class="cline-any cline-yes">28x</span>
912
- <span class="cline-any cline-yes">28x</span>
913
- <span class="cline-any cline-yes">28x</span>
914
- <span class="cline-any cline-neutral">&nbsp;</span>
915
- <span class="cline-any cline-neutral">&nbsp;</span>
916
- <span class="cline-any cline-yes">28x</span>
917
- <span class="cline-any cline-yes">28x</span>
918
- <span class="cline-any cline-yes">2x</span>
919
- <span class="cline-any cline-yes">2x</span>
920
- <span class="cline-any cline-yes">2x</span>
921
- <span class="cline-any cline-yes">2x</span>
922
- <span class="cline-any cline-yes">2x</span>
923
- <span class="cline-any cline-neutral">&nbsp;</span>
924
- <span class="cline-any cline-yes">26x</span>
925
- <span class="cline-any cline-neutral">&nbsp;</span>
926
- <span class="cline-any cline-neutral">&nbsp;</span>
927
- <span class="cline-any cline-neutral">&nbsp;</span>
928
- <span class="cline-any cline-yes">28x</span>
929
- <span class="cline-any cline-neutral">&nbsp;</span>
930
- <span class="cline-any cline-neutral">&nbsp;</span>
931
- <span class="cline-any cline-yes">28x</span>
932
- <span class="cline-any cline-yes">28x</span>
933
- <span class="cline-any cline-yes">28x</span>
934
- <span class="cline-any cline-yes">28x</span>
935
- <span class="cline-any cline-yes">28x</span>
936
- <span class="cline-any cline-neutral">&nbsp;</span>
937
- <span class="cline-any cline-neutral">&nbsp;</span>
938
- <span class="cline-any cline-yes">28x</span>
939
- <span class="cline-any cline-yes">28x</span>
940
- <span class="cline-any cline-neutral">&nbsp;</span>
941
- <span class="cline-any cline-yes">28x</span>
942
- <span class="cline-any cline-yes">28x</span>
943
- <span class="cline-any cline-yes">7x</span>
944
- <span class="cline-any cline-yes">7x</span>
945
- <span class="cline-any cline-no">&nbsp;</span>
946
- <span class="cline-any cline-yes">7x</span>
947
- <span class="cline-any cline-neutral">&nbsp;</span>
948
- <span class="cline-any cline-yes">1x</span>
949
- <span class="cline-any cline-yes">6x</span>
950
- <span class="cline-any cline-yes">6x</span>
951
- <span class="cline-any cline-neutral">&nbsp;</span>
952
- <span class="cline-any cline-no">&nbsp;</span>
953
- <span class="cline-any cline-neutral">&nbsp;</span>
954
- <span class="cline-any cline-neutral">&nbsp;</span>
955
- <span class="cline-any cline-neutral">&nbsp;</span>
956
- <span class="cline-any cline-neutral">&nbsp;</span>
957
- <span class="cline-any cline-yes">7x</span>
958
- <span class="cline-any cline-yes">2x</span>
959
- <span class="cline-any cline-neutral">&nbsp;</span>
960
- <span class="cline-any cline-yes">7x</span>
961
- <span class="cline-any cline-yes">1x</span>
962
- <span class="cline-any cline-neutral">&nbsp;</span>
963
- <span class="cline-any cline-neutral">&nbsp;</span>
964
- <span class="cline-any cline-yes">28x</span>
965
- <span class="cline-any cline-yes">2x</span>
966
- <span class="cline-any cline-neutral">&nbsp;</span>
967
- <span class="cline-any cline-neutral">&nbsp;</span>
968
- <span class="cline-any cline-yes">28x</span>
969
- <span class="cline-any cline-yes">1x</span>
970
- <span class="cline-any cline-neutral">&nbsp;</span>
971
- <span class="cline-any cline-neutral">&nbsp;</span>
972
- <span class="cline-any cline-yes">28x</span>
973
- <span class="cline-any cline-no">&nbsp;</span>
974
- <span class="cline-any cline-neutral">&nbsp;</span>
975
- <span class="cline-any cline-neutral">&nbsp;</span>
976
- <span class="cline-any cline-yes">28x</span>
977
- <span class="cline-any cline-neutral">&nbsp;</span>
978
- <span class="cline-any cline-yes">28x</span>
979
- <span class="cline-any cline-yes">2x</span>
980
- <span class="cline-any cline-yes">2x</span>
981
- <span class="cline-any cline-neutral">&nbsp;</span>
982
- <span class="cline-any cline-yes">26x</span>
983
- <span class="cline-any cline-neutral">&nbsp;</span>
984
- <span class="cline-any cline-neutral">&nbsp;</span>
985
- <span class="cline-any cline-yes">28x</span>
986
- <span class="cline-any cline-yes">3x</span>
987
- <span class="cline-any cline-yes">1x</span>
988
- <span class="cline-any cline-neutral">&nbsp;</span>
989
- <span class="cline-any cline-yes">2x</span>
990
- <span class="cline-any cline-neutral">&nbsp;</span>
991
- <span class="cline-any cline-neutral">&nbsp;</span>
992
- <span class="cline-any cline-neutral">&nbsp;</span>
993
- <span class="cline-any cline-yes">25x</span>
994
- <span class="cline-any cline-yes">3x</span>
995
- <span class="cline-any cline-yes">3x</span>
996
- <span class="cline-any cline-yes">22x</span>
997
- <span class="cline-any cline-yes">20x</span>
998
- <span class="cline-any cline-neutral">&nbsp;</span>
999
- <span class="cline-any cline-yes">2x</span>
1000
- <span class="cline-any cline-neutral">&nbsp;</span>
1001
- <span class="cline-any cline-yes">25x</span>
1002
- <span class="cline-any cline-yes">1x</span>
1003
- <span class="cline-any cline-neutral">&nbsp;</span>
1004
- <span class="cline-any cline-yes">24x</span>
1005
- <span class="cline-any cline-neutral">&nbsp;</span>
1006
- <span class="cline-any cline-neutral">&nbsp;</span>
1007
- <span class="cline-any cline-neutral">&nbsp;</span>
1008
- <span class="cline-any cline-yes">28x</span>
1009
- <span class="cline-any cline-neutral">&nbsp;</span>
1010
- <span class="cline-any cline-neutral">&nbsp;</span>
1011
- <span class="cline-any cline-neutral">&nbsp;</span>
1012
- <span class="cline-any cline-neutral">&nbsp;</span>
1013
- <span class="cline-any cline-yes">2x</span>
1014
- <span class="cline-any cline-yes">2x</span>
1015
- <span class="cline-any cline-yes">2x</span>
1016
- <span class="cline-any cline-yes">3x</span>
1017
- <span class="cline-any cline-yes">3x</span>
1018
- <span class="cline-any cline-yes">3x</span>
1019
- <span class="cline-any cline-neutral">&nbsp;</span>
1020
- <span class="cline-any cline-yes">2x</span>
1021
- <span class="cline-any cline-neutral">&nbsp;</span>
1022
- <span class="cline-any cline-neutral">&nbsp;</span>
1023
- <span class="cline-any cline-neutral">&nbsp;</span>
1024
- <span class="cline-any cline-neutral">&nbsp;</span>
1025
- <span class="cline-any cline-yes">4x</span>
1026
- <span class="cline-any cline-neutral">&nbsp;</span>
1027
- <span class="cline-any cline-neutral">&nbsp;</span>
1028
- <span class="cline-any cline-yes">8x</span>
1029
- <span class="cline-any cline-neutral">&nbsp;</span>
1030
- <span class="cline-any cline-neutral">&nbsp;</span>
1031
- <span class="cline-any cline-neutral">&nbsp;</span>
1032
- <span class="cline-any cline-neutral">&nbsp;</span>
1033
- <span class="cline-any cline-neutral">&nbsp;</span>
1034
- <span class="cline-any cline-neutral">&nbsp;</span>
1035
- <span class="cline-any cline-neutral">&nbsp;</span>
1036
- <span class="cline-any cline-yes">28x</span>
1037
- <span class="cline-any cline-yes">28x</span>
1038
- <span class="cline-any cline-yes">9x</span>
1039
- <span class="cline-any cline-yes">9x</span>
1040
- <span class="cline-any cline-neutral">&nbsp;</span>
1041
- <span class="cline-any cline-neutral">&nbsp;</span>
1042
- <span class="cline-any cline-neutral">&nbsp;</span>
1043
- <span class="cline-any cline-neutral">&nbsp;</span>
1044
- <span class="cline-any cline-neutral">&nbsp;</span>
1045
- <span class="cline-any cline-yes">28x</span>
1046
- <span class="cline-any cline-neutral">&nbsp;</span>
1047
- <span class="cline-any cline-neutral">&nbsp;</span>
1048
- <span class="cline-any cline-yes">28x</span>
1049
- <span class="cline-any cline-yes">9x</span>
1050
- <span class="cline-any cline-yes">9x</span>
1051
- <span class="cline-any cline-yes">9x</span>
1052
- <span class="cline-any cline-neutral">&nbsp;</span>
1053
- <span class="cline-any cline-neutral">&nbsp;</span>
1054
- <span class="cline-any cline-neutral">&nbsp;</span>
1055
- <span class="cline-any cline-neutral">&nbsp;</span>
1056
- <span class="cline-any cline-neutral">&nbsp;</span>
1057
- <span class="cline-any cline-neutral">&nbsp;</span>
1058
- <span class="cline-any cline-no">&nbsp;</span>
1059
- <span class="cline-any cline-no">&nbsp;</span>
1060
- <span class="cline-any cline-no">&nbsp;</span>
1061
- <span class="cline-any cline-neutral">&nbsp;</span>
1062
- <span class="cline-any cline-no">&nbsp;</span>
1063
- <span class="cline-any cline-neutral">&nbsp;</span>
1064
- <span class="cline-any cline-neutral">&nbsp;</span>
1065
- <span class="cline-any cline-neutral">&nbsp;</span>
1066
- <span class="cline-any cline-neutral">&nbsp;</span>
1067
- <span class="cline-any cline-neutral">&nbsp;</span>
1068
- <span class="cline-any cline-yes">28x</span>
1069
- <span class="cline-any cline-yes">28x</span>
1070
- <span class="cline-any cline-yes">7x</span>
1071
- <span class="cline-any cline-yes">7x</span>
1072
- <span class="cline-any cline-no">&nbsp;</span>
1073
- <span class="cline-any cline-yes">7x</span>
1074
- <span class="cline-any cline-yes">1x</span>
1075
- <span class="cline-any cline-neutral">&nbsp;</span>
1076
- <span class="cline-any cline-yes">6x</span>
1077
- <span class="cline-any cline-yes">6x</span>
1078
- <span class="cline-any cline-yes">6x</span>
1079
- <span class="cline-any cline-neutral">&nbsp;</span>
1080
- <span class="cline-any cline-neutral">&nbsp;</span>
1081
- <span class="cline-any cline-neutral">&nbsp;</span>
1082
- <span class="cline-any cline-neutral">&nbsp;</span>
1083
- <span class="cline-any cline-yes">28x</span>
1084
- <span class="cline-any cline-yes">1x</span>
1085
- <span class="cline-any cline-yes">1x</span>
1086
- <span class="cline-any cline-neutral">&nbsp;</span>
1087
- <span class="cline-any cline-neutral">&nbsp;</span>
1088
- <span class="cline-any cline-neutral">&nbsp;</span>
1089
- <span class="cline-any cline-yes">28x</span>
1090
- <span class="cline-any cline-no">&nbsp;</span>
1091
- <span class="cline-any cline-no">&nbsp;</span>
1092
- <span class="cline-any cline-neutral">&nbsp;</span>
1093
- <span class="cline-any cline-neutral">&nbsp;</span>
1094
- <span class="cline-any cline-yes">28x</span>
1095
- <span class="cline-any cline-neutral">&nbsp;</span>
1096
- <span class="cline-any cline-neutral">&nbsp;</span>
1097
- <span class="cline-any cline-neutral">&nbsp;</span>
1098
- <span class="cline-any cline-yes">1x</span>
1099
- <span class="cline-any cline-no">&nbsp;</span>
1100
- <span class="cline-any cline-no">&nbsp;</span>
1101
- <span class="cline-any cline-neutral">&nbsp;</span>
1102
- <span class="cline-any cline-yes">1x</span>
1103
- <span class="cline-any cline-neutral">&nbsp;</span>
1104
- <span class="cline-any cline-neutral">&nbsp;</span>
1105
- <span class="cline-any cline-neutral">&nbsp;</span>
1106
- <span class="cline-any cline-neutral">&nbsp;</span>
1107
- <span class="cline-any cline-yes">1x</span>
1108
- <span class="cline-any cline-neutral">&nbsp;</span>
1109
- <span class="cline-any cline-no">&nbsp;</span>
1110
- <span class="cline-any cline-neutral">&nbsp;</span>
1111
- <span class="cline-any cline-neutral">&nbsp;</span>
1112
- <span class="cline-any cline-neutral">&nbsp;</span>
1113
- <span class="cline-any cline-yes">6x</span>
1114
- <span class="cline-any cline-neutral">&nbsp;</span>
1115
- <span class="cline-any cline-neutral">&nbsp;</span>
1116
- <span class="cline-any cline-neutral">&nbsp;</span>
1117
- <span class="cline-any cline-neutral">&nbsp;</span>
1118
- <span class="cline-any cline-neutral">&nbsp;</span>
1119
- <span class="cline-any cline-yes">32x</span>
1120
- <span class="cline-any cline-yes">3x</span>
1121
- <span class="cline-any cline-yes">3x</span>
1122
- <span class="cline-any cline-neutral">&nbsp;</span>
1123
- <span class="cline-any cline-neutral">&nbsp;</span>
1124
- <span class="cline-any cline-neutral">&nbsp;</span>
1125
- <span class="cline-any cline-yes">23x</span>
1126
- <span class="cline-any cline-yes">20x</span>
1127
- <span class="cline-any cline-yes">20x</span>
1128
- <span class="cline-any cline-neutral">&nbsp;</span>
1129
- <span class="cline-any cline-neutral">&nbsp;</span>
1130
- <span class="cline-any cline-neutral">&nbsp;</span>
1131
- <span class="cline-any cline-yes">3x</span>
1132
- <span class="cline-any cline-no">&nbsp;</span>
1133
- <span class="cline-any cline-neutral">&nbsp;</span>
1134
- <span class="cline-any cline-neutral">&nbsp;</span>
1135
- <span class="cline-any cline-neutral">&nbsp;</span>
1136
- <span class="cline-any cline-neutral">&nbsp;</span>
1137
- <span class="cline-any cline-neutral">&nbsp;</span>
1138
- <span class="cline-any cline-neutral">&nbsp;</span>
1139
- <span class="cline-any cline-neutral">&nbsp;</span>
1140
- <span class="cline-any cline-neutral">&nbsp;</span>
1141
- <span class="cline-any cline-neutral">&nbsp;</span>
1142
- <span class="cline-any cline-yes">25x</span>
1143
- <span class="cline-any cline-neutral">&nbsp;</span>
1144
- <span class="cline-any cline-yes">25x</span>
1145
- <span class="cline-any cline-yes">30x</span>
1146
- <span class="cline-any cline-yes">30x</span>
1147
- <span class="cline-any cline-neutral">&nbsp;</span>
1148
- <span class="cline-any cline-yes">28x</span>
1149
- <span class="cline-any cline-yes">28x</span>
1150
- <span class="cline-any cline-yes">7x</span>
1151
- <span class="cline-any cline-neutral">&nbsp;</span>
1152
- <span class="cline-any cline-yes">28x</span>
1153
- <span class="cline-any cline-yes">28x</span>
1154
- <span class="cline-any cline-neutral">&nbsp;</span>
1155
- <span class="cline-any cline-yes">28x</span>
1156
- <span class="cline-any cline-yes">28x</span>
1157
- <span class="cline-any cline-neutral">&nbsp;</span>
1158
- <span class="cline-any cline-neutral">&nbsp;</span>
1159
- <span class="cline-any cline-neutral">&nbsp;</span>
1160
- <span class="cline-any cline-yes">25x</span>
1161
- <span class="cline-any cline-neutral">&nbsp;</span>
1162
- <span class="cline-any cline-neutral">&nbsp;</span>
1163
- <span class="cline-any cline-neutral">&nbsp;</span>
1164
- <span class="cline-any cline-yes">10x</span>
1165
- <span class="cline-any cline-no">&nbsp;</span>
1166
- <span class="cline-any cline-yes">10x</span>
1167
- <span class="cline-any cline-yes">11x</span>
1168
- <span class="cline-any cline-neutral">&nbsp;</span>
1169
- <span class="cline-any cline-no">&nbsp;</span>
1170
- <span class="cline-any cline-neutral">&nbsp;</span>
1171
- <span class="cline-any cline-neutral">&nbsp;</span>
1172
- <span class="cline-any cline-neutral">&nbsp;</span>
1173
- <span class="cline-any cline-neutral">&nbsp;</span>
1174
- <span class="cline-any cline-yes">31x</span>
1175
- <span class="cline-any cline-yes">31x</span>
1176
- <span class="cline-any cline-yes">31x</span>
1177
- <span class="cline-any cline-neutral">&nbsp;</span>
1178
- <span class="cline-any cline-neutral">&nbsp;</span>
1179
- <span class="cline-any cline-neutral">&nbsp;</span>
1180
- <span class="cline-any cline-neutral">&nbsp;</span>
1181
- <span class="cline-any cline-yes">46x</span>
1182
- <span class="cline-any cline-neutral">&nbsp;</span>
1183
- <span class="cline-any cline-yes">11x</span>
1184
- <span class="cline-any cline-neutral">&nbsp;</span>
1185
- <span class="cline-any cline-no">&nbsp;</span>
1186
- <span class="cline-any cline-no">&nbsp;</span>
1187
- <span class="cline-any cline-neutral">&nbsp;</span>
1188
- <span class="cline-any cline-no">&nbsp;</span>
1189
- <span class="cline-any cline-no">&nbsp;</span>
1190
- <span class="cline-any cline-neutral">&nbsp;</span>
1191
- <span class="cline-any cline-no">&nbsp;</span>
1192
- <span class="cline-any cline-no">&nbsp;</span>
1193
- <span class="cline-any cline-neutral">&nbsp;</span>
1194
- <span class="cline-any cline-yes">9x</span>
1195
- <span class="cline-any cline-yes">9x</span>
1196
- <span class="cline-any cline-neutral">&nbsp;</span>
1197
- <span class="cline-any cline-neutral">&nbsp;</span>
1198
- <span class="cline-any cline-neutral">&nbsp;</span>
1199
- <span class="cline-any cline-no">&nbsp;</span>
1200
- <span class="cline-any cline-no">&nbsp;</span>
1201
- <span class="cline-any cline-neutral">&nbsp;</span>
1202
- <span class="cline-any cline-yes">11x</span>
1203
- <span class="cline-any cline-neutral">&nbsp;</span>
1204
- <span class="cline-any cline-yes">32x</span>
1205
- <span class="cline-any cline-yes">1x</span>
1206
- <span class="cline-any cline-neutral">&nbsp;</span>
1207
- <span class="cline-any cline-yes">31x</span>
1208
- <span class="cline-any cline-neutral">&nbsp;</span>
1209
- <span class="cline-any cline-yes">32x</span>
1210
- <span class="cline-any cline-neutral">&nbsp;</span>
1211
- <span class="cline-any cline-yes">3x</span>
1212
- <span class="cline-any cline-yes">3x</span>
1213
- <span class="cline-any cline-neutral">&nbsp;</span>
1214
- <span class="cline-any cline-no">&nbsp;</span>
1215
- <span class="cline-any cline-no">&nbsp;</span>
1216
- <span class="cline-any cline-neutral">&nbsp;</span>
1217
- <span class="cline-any cline-no">&nbsp;</span>
1218
- <span class="cline-any cline-no">&nbsp;</span>
1219
- <span class="cline-any cline-no">&nbsp;</span>
1220
- <span class="cline-any cline-neutral">&nbsp;</span>
1221
- <span class="cline-any cline-no">&nbsp;</span>
1222
- <span class="cline-any cline-no">&nbsp;</span>
1223
- <span class="cline-any cline-neutral">&nbsp;</span>
1224
- <span class="cline-any cline-no">&nbsp;</span>
1225
- <span class="cline-any cline-no">&nbsp;</span>
1226
- <span class="cline-any cline-neutral">&nbsp;</span>
1227
- <span class="cline-any cline-no">&nbsp;</span>
1228
- <span class="cline-any cline-no">&nbsp;</span>
1229
- <span class="cline-any cline-neutral">&nbsp;</span>
1230
- <span class="cline-any cline-no">&nbsp;</span>
1231
- <span class="cline-any cline-no">&nbsp;</span>
1232
- <span class="cline-any cline-neutral">&nbsp;</span>
1233
- <span class="cline-any cline-no">&nbsp;</span>
1234
- <span class="cline-any cline-no">&nbsp;</span>
1235
- <span class="cline-any cline-neutral">&nbsp;</span>
1236
- <span class="cline-any cline-neutral">&nbsp;</span>
1237
- <span class="cline-any cline-neutral">&nbsp;</span>
1238
- <span class="cline-any cline-neutral">&nbsp;</span>
1239
- <span class="cline-any cline-neutral">&nbsp;</span>
1240
- <span class="cline-any cline-neutral">&nbsp;</span>
1241
- <span class="cline-any cline-neutral">&nbsp;</span>
1242
- <span class="cline-any cline-yes">28x</span>
1243
- <span class="cline-any cline-neutral">&nbsp;</span>
1244
- <span class="cline-any cline-neutral">&nbsp;</span>
1245
- <span class="cline-any cline-neutral">&nbsp;</span>
1246
- <span class="cline-any cline-yes">28x</span>
1247
- <span class="cline-any cline-neutral">&nbsp;</span>
1248
- <span class="cline-any cline-yes">29x</span>
1249
- <span class="cline-any cline-neutral">&nbsp;</span>
1250
- <span class="cline-any cline-neutral">&nbsp;</span>
1251
- <span class="cline-any cline-neutral">&nbsp;</span>
1252
- <span class="cline-any cline-neutral">&nbsp;</span>
1253
- <span class="cline-any cline-yes">28x</span>
1254
- <span class="cline-any cline-neutral">&nbsp;</span>
1255
- <span class="cline-any cline-neutral">&nbsp;</span>
1256
- <span class="cline-any cline-neutral">&nbsp;</span>
1257
- <span class="cline-any cline-neutral">&nbsp;</span>
1258
- <span class="cline-any cline-yes">2x</span>
1259
- <span class="cline-any cline-neutral">&nbsp;</span>
1260
- <span class="cline-any cline-neutral">&nbsp;</span>
1261
- <span class="cline-any cline-neutral">&nbsp;</span>
1262
- <span class="cline-any cline-yes">2x</span>
1263
- <span class="cline-any cline-yes">2x</span>
1264
- <span class="cline-any cline-neutral">&nbsp;</span>
1265
- <span class="cline-any cline-neutral">&nbsp;</span>
1266
- <span class="cline-any cline-neutral">&nbsp;</span>
1267
- <span class="cline-any cline-no">&nbsp;</span>
1268
- <span class="cline-any cline-no">&nbsp;</span>
1269
- <span class="cline-any cline-neutral">&nbsp;</span>
1270
- <span class="cline-any cline-neutral">&nbsp;</span>
1271
- <span class="cline-any cline-neutral">&nbsp;</span>
1272
- <span class="cline-any cline-yes">30x</span>
1273
- <span class="cline-any cline-yes">16x</span>
1274
- <span class="cline-any cline-yes">15x</span>
1275
- <span class="cline-any cline-neutral">&nbsp;</span>
1276
- <span class="cline-any cline-neutral">&nbsp;</span>
1277
- <span class="cline-any cline-neutral">&nbsp;</span>
1278
- <span class="cline-any cline-yes">35x</span>
1279
- <span class="cline-any cline-yes">15x</span>
1280
- <span class="cline-any cline-neutral">&nbsp;</span>
1281
- <span class="cline-any cline-yes">15x</span>
1282
- <span class="cline-any cline-yes">20x</span>
1283
- <span class="cline-any cline-yes">5x</span>
1284
- <span class="cline-any cline-yes">5x</span>
1285
- <span class="cline-any cline-neutral">&nbsp;</span>
1286
- <span class="cline-any cline-yes">15x</span>
1287
- <span class="cline-any cline-neutral">&nbsp;</span>
1288
- <span class="cline-any cline-neutral">&nbsp;</span>
1289
- <span class="cline-any cline-neutral">&nbsp;</span>
1290
- <span class="cline-any cline-yes">15x</span>
1291
- <span class="cline-any cline-neutral">&nbsp;</span>
1292
- <span class="cline-any cline-neutral">&nbsp;</span>
1293
- <span class="cline-any cline-neutral">&nbsp;</span>
1294
- <span class="cline-any cline-yes">35x</span>
1295
- <span class="cline-any cline-neutral">&nbsp;</span>
1296
- <span class="cline-any cline-neutral">&nbsp;</span>
1297
- <span class="cline-any cline-neutral">&nbsp;</span>
1298
- <span class="cline-any cline-neutral">&nbsp;</span>
1299
- <span class="cline-any cline-neutral">&nbsp;</span>
1300
- <span class="cline-any cline-neutral">&nbsp;</span>
1301
- <span class="cline-any cline-neutral">&nbsp;</span>
1302
- <span class="cline-any cline-neutral">&nbsp;</span>
1303
- <span class="cline-any cline-neutral">&nbsp;</span>
1304
- <span class="cline-any cline-yes">1x</span>
1305
- <span class="cline-any cline-neutral">&nbsp;</span>
1306
- <span class="cline-any cline-neutral">&nbsp;</span>
1307
- <span class="cline-any cline-neutral">&nbsp;</span>
1308
- <span class="cline-any cline-neutral">&nbsp;</span>
1309
- <span class="cline-any cline-neutral">&nbsp;</span>
1310
- <span class="cline-any cline-neutral">&nbsp;</span>
1311
- <span class="cline-any cline-neutral">&nbsp;</span>
1312
- <span class="cline-any cline-neutral">&nbsp;</span>
1313
- <span class="cline-any cline-neutral">&nbsp;</span>
1314
- <span class="cline-any cline-neutral">&nbsp;</span>
1315
- <span class="cline-any cline-neutral">&nbsp;</span>
1316
- <span class="cline-any cline-neutral">&nbsp;</span>
1317
- <span class="cline-any cline-neutral">&nbsp;</span>
1318
- <span class="cline-any cline-neutral">&nbsp;</span>
1319
- <span class="cline-any cline-neutral">&nbsp;</span>
1320
- <span class="cline-any cline-neutral">&nbsp;</span>
1321
- <span class="cline-any cline-neutral">&nbsp;</span>
1322
- <span class="cline-any cline-neutral">&nbsp;</span>
1323
- <span class="cline-any cline-neutral">&nbsp;</span>
1324
- <span class="cline-any cline-neutral">&nbsp;</span>
1325
- <span class="cline-any cline-neutral">&nbsp;</span>
1326
- <span class="cline-any cline-neutral">&nbsp;</span>
1327
- <span class="cline-any cline-neutral">&nbsp;</span>
1328
- <span class="cline-any cline-neutral">&nbsp;</span>
1329
- <span class="cline-any cline-neutral">&nbsp;</span>
1330
- <span class="cline-any cline-neutral">&nbsp;</span>
1331
- <span class="cline-any cline-neutral">&nbsp;</span>
1332
- <span class="cline-any cline-neutral">&nbsp;</span>
1333
- <span class="cline-any cline-neutral">&nbsp;</span>
1334
- <span class="cline-any cline-neutral">&nbsp;</span>
1335
- <span class="cline-any cline-neutral">&nbsp;</span>
1336
- <span class="cline-any cline-neutral">&nbsp;</span>
1337
- <span class="cline-any cline-neutral">&nbsp;</span>
1338
- <span class="cline-any cline-neutral">&nbsp;</span>
1339
- <span class="cline-any cline-neutral">&nbsp;</span>
1340
- <span class="cline-any cline-neutral">&nbsp;</span>
1341
- <span class="cline-any cline-neutral">&nbsp;</span>
1342
- <span class="cline-any cline-neutral">&nbsp;</span>
1343
- <span class="cline-any cline-neutral">&nbsp;</span>
1344
- <span class="cline-any cline-neutral">&nbsp;</span>
1345
- <span class="cline-any cline-neutral">&nbsp;</span>
1346
- <span class="cline-any cline-neutral">&nbsp;</span>
1347
- <span class="cline-any cline-neutral">&nbsp;</span>
1348
- <span class="cline-any cline-neutral">&nbsp;</span>
1349
- <span class="cline-any cline-neutral">&nbsp;</span>
1350
- <span class="cline-any cline-neutral">&nbsp;</span>
1351
- <span class="cline-any cline-neutral">&nbsp;</span>
1352
- <span class="cline-any cline-neutral">&nbsp;</span>
1353
- <span class="cline-any cline-neutral">&nbsp;</span>
1354
- <span class="cline-any cline-neutral">&nbsp;</span>
1355
- <span class="cline-any cline-neutral">&nbsp;</span>
1356
- <span class="cline-any cline-neutral">&nbsp;</span>
1357
- <span class="cline-any cline-neutral">&nbsp;</span>
1358
- <span class="cline-any cline-neutral">&nbsp;</span>
1359
- <span class="cline-any cline-neutral">&nbsp;</span>
1360
- <span class="cline-any cline-neutral">&nbsp;</span>
1361
- <span class="cline-any cline-neutral">&nbsp;</span>
1362
- <span class="cline-any cline-neutral">&nbsp;</span>
1363
- <span class="cline-any cline-neutral">&nbsp;</span>
1364
- <span class="cline-any cline-neutral">&nbsp;</span>
1365
- <span class="cline-any cline-neutral">&nbsp;</span>
1366
- <span class="cline-any cline-neutral">&nbsp;</span>
1367
- <span class="cline-any cline-neutral">&nbsp;</span>
1368
- <span class="cline-any cline-neutral">&nbsp;</span>
1369
- <span class="cline-any cline-neutral">&nbsp;</span>
1370
- <span class="cline-any cline-neutral">&nbsp;</span>
1371
- <span class="cline-any cline-neutral">&nbsp;</span>
1372
- <span class="cline-any cline-neutral">&nbsp;</span>
1373
- <span class="cline-any cline-neutral">&nbsp;</span>
1374
- <span class="cline-any cline-neutral">&nbsp;</span>
1375
- <span class="cline-any cline-neutral">&nbsp;</span>
1376
- <span class="cline-any cline-neutral">&nbsp;</span>
1377
- <span class="cline-any cline-neutral">&nbsp;</span>
1378
- <span class="cline-any cline-neutral">&nbsp;</span>
1379
- <span class="cline-any cline-neutral">&nbsp;</span>
1380
- <span class="cline-any cline-neutral">&nbsp;</span>
1381
- <span class="cline-any cline-neutral">&nbsp;</span>
1382
- <span class="cline-any cline-neutral">&nbsp;</span>
1383
- <span class="cline-any cline-neutral">&nbsp;</span>
1384
- <span class="cline-any cline-neutral">&nbsp;</span>
1385
- <span class="cline-any cline-neutral">&nbsp;</span>
1386
- <span class="cline-any cline-neutral">&nbsp;</span>
1387
- <span class="cline-any cline-neutral">&nbsp;</span>
1388
- <span class="cline-any cline-neutral">&nbsp;</span>
1389
- <span class="cline-any cline-neutral">&nbsp;</span>
1390
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { OpRootNode, OpRouteNode, OpOperationNode, OpResponseHeaderNode, ContractTypeNode, ParamSource } from '@contractkit/core';
1391
- import { resolveModifiers, classifyContentType } from '@contractkit/core';
1392
- import { renderPyType, toPythonFieldName } from './codegen-models.js';
1393
- &nbsp;
1394
- // ─── Public entry point ────────────────────────────────────────────────────
1395
- &nbsp;
1396
- export interface ClientCodegenOptions {
1397
- /** Map from model name → Python module path (e.g. "._models_payments") */
1398
- modelModulePaths?: Map&lt;string, string&gt;;
1399
- /** Current client's module name (e.g. "_client_payments") — used to avoid self-imports */
1400
- currentModule?: string;
1401
- /** Set of model names that have Input variants */
1402
- modelsWithInput?: Set&lt;string&gt;;
1403
- /**
1404
- * Whether to emit client methods for operations marked `internal`. Defaults to `false` —
1405
- * internal ops are omitted so consumers don't pick them up. Set to `true` for an
1406
- * internal-use SDK that should expose them.
1407
- */
1408
- includeInternal?: boolean;
1409
- }
1410
- &nbsp;
1411
- /**
1412
- * Returns true if the root contains at least one operation eligible for client emission.
1413
- * With `includeInternal: false` (default) that means at least one non-internal op; with
1414
- * `includeInternal: true` any op qualifies.
1415
- */
1416
- export function hasPublicOperations(root: OpRootNode, includeInternal = false): boolean {
1417
- for (const route of root.routes) {
1418
- for (const op of route.operations) {
1419
- if (includeInternal || !resolveModifiers(route, op).includes('internal')) return true;
1420
- }
1421
- }
1422
- return false;
1423
- }
1424
- &nbsp;
1425
- /**
1426
- * Generate a Pydantic/httpx async Python client class from an OpRootNode.
1427
- */
1428
- export function generatePythonClient(root: OpRootNode, opts: ClientCodegenOptions = {}): string {
1429
- const clientClassName = deriveClientClassName(root.file);
1430
- const { modelsWithInput } = opts;
1431
- const includeInternal = opts.includeInternal ?? false;
1432
- &nbsp;
1433
- // Collect all model types referenced in public ops
1434
- const referencedModels = collectReferencedModels(root, modelsWithInput, includeInternal);
1435
- &nbsp;
1436
- const lines: string[] = [];
1437
- lines.push('# Auto-generated by contractkit-plugin-python-sdk. Do not edit manually.');
1438
- lines.push('from __future__ import annotations');
1439
- lines.push('');
1440
- &nbsp;
1441
- // stdlib imports
1442
- const needsDatetime = referencedModels.has('__datetime__');
1443
- const needsDate = referencedModels.has('__date__');
1444
- const needsTime = referencedModels.has('__time__');
1445
- const needsUUID = referencedModels.has('__uuid__');
1446
- const needsAny = referencedModels.has('__any__');
1447
- &nbsp;
1448
- <span class="missing-if-branch" title="if path not taken" >I</span>if (needsDatetime || needsDate || needsTime) {
1449
- const dtParts: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
1450
- <span class="cstat-no" title="statement not covered" > if (needsDate) <span class="cstat-no" title="statement not covered" >dtParts.push('date');</span></span>
1451
- <span class="cstat-no" title="statement not covered" > if (needsDatetime) <span class="cstat-no" title="statement not covered" >dtParts.push('datetime');</span></span>
1452
- <span class="cstat-no" title="statement not covered" > if (needsTime) <span class="cstat-no" title="statement not covered" >dtParts.push('time');</span></span>
1453
- <span class="cstat-no" title="statement not covered" > lines.push(`from datetime import ${dtParts.join(', ')}`);</span>
1454
- }
1455
- if (needsUUID) lines.push('from uuid import UUID');
1456
- &nbsp;
1457
- // Collect public ops once — used both for TypedDict emission and method generation.
1458
- const publicOps: Array&lt;{ route: OpRouteNode; op: OpOperationNode }&gt; = [];
1459
- for (const route of root.routes) {
1460
- for (const op of route.operations) {
1461
- if (!includeInternal &amp;&amp; resolveModifiers(route, op).includes('internal')) continue;
1462
- publicOps.push({ route, op });
1463
- }
1464
- }
1465
- const opsWithRespHeaders = publicOps.filter(({ op }) =&gt; {
1466
- const primary = op.responses.find(r =&gt; r.bodyType) ?? op.responses[0];
1467
- return (primary?.headers?.length ?? 0) &gt; 0;
1468
- });
1469
- &nbsp;
1470
- if (needsAny || opsWithRespHeaders.length &gt; 0) {
1471
- const typingImports: string[] = [];
1472
- <span class="missing-if-branch" title="if path not taken" >I</span>if (needsAny) <span class="cstat-no" title="statement not covered" >typingImports.push('Any');</span>
1473
- <span class="missing-if-branch" title="else path not taken" >E</span>if (opsWithRespHeaders.length &gt; 0) typingImports.push('TypedDict');
1474
- lines.push(`from typing import ${typingImports.join(', ')}`);
1475
- }
1476
- lines.push('from ._base_client import BaseClient, SdkError # noqa: F401');
1477
- &nbsp;
1478
- // Model imports grouped by module
1479
- const modelImportsByModule = new Map&lt;string, Set&lt;string&gt;&gt;();
1480
- for (const name of referencedModels) {
1481
- if (name.startsWith('__')) continue; // sentinel keys
1482
- const modulePath = opts.modelModulePaths?.get(name);
1483
- if (modulePath) {
1484
- let s = modelImportsByModule.get(modulePath);
1485
- if (!s) {
1486
- s = new Set();
1487
- modelImportsByModule.set(modulePath, s);
1488
- }
1489
- s.add(name);
1490
- }
1491
- }
1492
- for (const [mod, names] of [...modelImportsByModule].sort(<span class="fstat-no" title="function not covered" >(a</span>, b) =&gt; <span class="cstat-no" title="statement not covered" >a[0].localeCompare(b[0]))) {</span>
1493
- const sorted = [...names].sort().join(', ');
1494
- lines.push(`from ${mod} import ${sorted}`);
1495
- }
1496
- &nbsp;
1497
- // Per-method response-header TypedDicts.
1498
- for (const { route, op } of opsWithRespHeaders) {
1499
- const primary = op.responses.find(r =&gt; r.bodyType) ?? op.responses[0]!;
1500
- const className = `${snakeToPascal(deriveMethodName(op, route))}Headers`;
1501
- lines.push('');
1502
- lines.push('');
1503
- lines.push(`class ${className}(TypedDict, total=False):`);
1504
- for (const h of primary.headers!) {
1505
- const pyName = toPythonFieldName(h.name);
1506
- const tag = h.optional ? 'optional' : 'required';
1507
- lines.push(` ${pyName}: str # ${h.name} (${tag})`);
1508
- }
1509
- }
1510
- &nbsp;
1511
- lines.push('');
1512
- lines.push('');
1513
- lines.push(`class ${clientClassName}(BaseClient):`);
1514
- &nbsp;
1515
- let hasAnyMethod = false;
1516
- for (const route of root.routes) {
1517
- for (const op of route.operations) {
1518
- const mods = resolveModifiers(route, op);
1519
- if (!includeInternal &amp;&amp; mods.includes('internal')) continue;
1520
- hasAnyMethod = true;
1521
- lines.push('');
1522
- if (mods.includes('deprecated')) lines.push(' # @deprecated');
1523
- lines.push(...generateMethod(route, op, opts));
1524
- }
1525
- }
1526
- &nbsp;
1527
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!hasAnyMethod) {
1528
- <span class="cstat-no" title="statement not covered" > lines.push(' pass');</span>
1529
- }
1530
- &nbsp;
1531
- lines.push('');
1532
- &nbsp;
1533
- return lines.join('\n');
1534
- }
1535
- &nbsp;
1536
- // ─── Method generation ────────────────────────────────────────────────────
1537
- &nbsp;
1538
- interface MethodParam {
1539
- name: string;
1540
- type: string;
1541
- optional: boolean;
1542
- isModel: boolean; // Pydantic BaseModel → use .model_dump(mode="json")
1543
- }
1544
- &nbsp;
1545
- function generateMethod(route: OpRouteNode, op: OpOperationNode, opts: ClientCodegenOptions): string[] {
1546
- const lines: string[] = [];
1547
- const { modelsWithInput } = opts;
1548
- const methodName = deriveMethodName(op, route);
1549
- const httpMethod = op.method.toUpperCase();
1550
- &nbsp;
1551
- const params = buildMethodParams(route, op, modelsWithInput);
1552
- const selfParam = 'self';
1553
- const allParams = params.map(p =&gt; {
1554
- if (p.optional) return `${p.name}: ${p.type} | None = None`;
1555
- return `${p.name}: ${p.type}`;
1556
- });
1557
- const paramStr = allParams.length &gt; 0 ? `, ${allParams.join(', ')}` : '';
1558
- &nbsp;
1559
- // Return type — non-JSON responses ignore the schema and return raw bytes/str.
1560
- const primaryResponse = op.responses.find(r =&gt; r.bodyType) ?? op.responses[0];
1561
- const isVoid = !primaryResponse?.bodyType;
1562
- const respCategory = primaryResponse?.contentType ? classifyContentType(primaryResponse.contentType) : 'json';
1563
- const dataType = isVoid
1564
- ? 'None'
1565
- : respCategory === 'text'
1566
- ? 'str'
1567
- : respCategory === 'binary'
1568
- ? 'bytes'
1569
- : renderPyType(primaryResponse!.bodyType!, modelsWithInput);
1570
- const isModelReturn = !isVoid &amp;&amp; respCategory === 'json' &amp;&amp; isModelRef(primaryResponse!.bodyType!, modelsWithInput);
1571
- const isListModelReturn = !isVoid &amp;&amp; respCategory === 'json' &amp;&amp; isListModelRef(primaryResponse!.bodyType!, modelsWithInput);
1572
- const respHeaders = primaryResponse?.headers ?? [];
1573
- const hasRespHeaders = respHeaders.length &gt; 0;
1574
- const headersTypeName = hasRespHeaders ? `${snakeToPascal(methodName)}Headers` : '';
1575
- const returnType = hasRespHeaders ? (isVoid ? headersTypeName : `tuple[${dataType}, ${headersTypeName}]`) : dataType;
1576
- &nbsp;
1577
- // Description
1578
- const desc = op.description ?? route.description;
1579
- if (op.name || desc) {
1580
- lines.push(` async def ${methodName}(${selfParam}${paramStr}) -&gt; ${returnType}:`);
1581
- lines.push(` """`);
1582
- <span class="missing-if-branch" title="else path not taken" >E</span>if (op.name) lines.push(` ${op.name}`);
1583
- <span class="missing-if-branch" title="if path not taken" >I</span>if (desc) <span class="cstat-no" title="statement not covered" >lines.push(` ${desc}`);</span>
1584
- lines.push(` """`);
1585
- } else {
1586
- lines.push(` async def ${methodName}(${selfParam}${paramStr}) -&gt; ${returnType}:`);
1587
- }
1588
- &nbsp;
1589
- // Build URL
1590
- const urlExpr = buildUrlExpression(route.path);
1591
- &nbsp;
1592
- // Query params
1593
- const hasQuery = !!op.query;
1594
- const primaryBody = op.request?.bodies[0];
1595
- const hasBody = !!primaryBody;
1596
- const isMultipart = primaryBody?.contentType === 'multipart/form-data';
1597
- const hasCustomHeaders = !!op.headers;
1598
- &nbsp;
1599
- // Build kwargs for _fetch
1600
- const fetchKwargs: string[] = [];
1601
- fetchKwargs.push(`method="${httpMethod}"`);
1602
- &nbsp;
1603
- const reqCategory = primaryBody?.contentType ? classifyContentType(primaryBody.contentType) : 'json';
1604
- if (hasBody) {
1605
- const bodyParam = params.find(p =&gt; p.name === 'body');
1606
- <span class="missing-if-branch" title="if path not taken" >I</span>if (isMultipart) {
1607
- <span class="cstat-no" title="statement not covered" > fetchKwargs.push('body=body');</span>
1608
- } else if (reqCategory === 'text' || reqCategory === 'binary') {
1609
- // Pass-through: caller supplies a str / bytes payload that goes on the wire as-is.
1610
- fetchKwargs.push('body=body');
1611
- } else if (bodyParam?.isModel) {
1612
- fetchKwargs.push('body=body.model_dump(mode="json")');
1613
- } else <span class="missing-if-branch" title="else path not taken" >E</span>{
1614
- <span class="cstat-no" title="statement not covered" > fetchKwargs.push('body=body');</span>
1615
- }
1616
- // Forward the declared content-type so `_fetch` sets the correct Content-Type header
1617
- // (vendor JSON types like `application/vnd.api+json` still serialize as JSON but need
1618
- // their literal mime on the wire).
1619
- if (primaryBody.contentType !== 'application/json') {
1620
- fetchKwargs.push(`content_type=${JSON.stringify(primaryBody.contentType)}`);
1621
- }
1622
- if (reqCategory === 'text' || reqCategory === 'binary') {
1623
- fetchKwargs.push(`body_kind="${reqCategory}"`);
1624
- }
1625
- }
1626
- if (respCategory === 'text' || respCategory === 'binary') {
1627
- fetchKwargs.push(`response_kind="${respCategory}"`);
1628
- }
1629
- &nbsp;
1630
- if (hasQuery) {
1631
- fetchKwargs.push('params=query');
1632
- }
1633
- &nbsp;
1634
- <span class="missing-if-branch" title="if path not taken" >I</span>if (hasCustomHeaders) {
1635
- <span class="cstat-no" title="statement not covered" > fetchKwargs.push('extra_headers=custom_headers');</span>
1636
- }
1637
- &nbsp;
1638
- const kwargsStr = fetchKwargs.length &gt; 1 ? fetchKwargs.join(', ') : (fetchKwargs[0] ?? <span class="branch-1 cbranch-no" title="branch not covered" >'');</span>
1639
- &nbsp;
1640
- if (hasRespHeaders) {
1641
- lines.push(` result, _response_headers = await self._fetch_with_headers(${urlExpr}, ${kwargsStr})`);
1642
- lines.push(...buildHeadersDictLines(respHeaders, headersTypeName));
1643
- } else {
1644
- lines.push(` result = await self._fetch(${urlExpr}, ${kwargsStr})`);
1645
- }
1646
- &nbsp;
1647
- if (isVoid) {
1648
- if (hasRespHeaders) {
1649
- lines.push(` return headers`);
1650
- } else {
1651
- lines.push(` return None`);
1652
- }
1653
- } else {
1654
- let dataExpr: string;
1655
- if (isListModelReturn) {
1656
- const innerType = getListItemType(primaryResponse!.bodyType!, modelsWithInput);
1657
- dataExpr = `[${innerType}.model_validate(item) for item in result]`;
1658
- } else if (isModelReturn) {
1659
- dataExpr = `${dataType}.model_validate(result)`;
1660
- } else {
1661
- dataExpr = 'result';
1662
- }
1663
- if (hasRespHeaders) {
1664
- lines.push(` return ${dataExpr}, headers`);
1665
- } else {
1666
- lines.push(` return ${dataExpr}`);
1667
- }
1668
- }
1669
- &nbsp;
1670
- return lines;
1671
- }
1672
- &nbsp;
1673
- /** Build the lines that construct a TypedDict literal of declared response headers. */
1674
- function buildHeadersDictLines(headers: OpResponseHeaderNode[], typeName: string): string[] {
1675
- const lines: string[] = [];
1676
- lines.push(` headers: ${typeName} = {}`);
1677
- for (const h of headers) {
1678
- const pyName = toPythonFieldName(h.name);
1679
- lines.push(` if ${JSON.stringify(h.name.toLowerCase())} in _response_headers:`);
1680
- lines.push(` headers[${JSON.stringify(pyName)}] = _response_headers[${JSON.stringify(h.name.toLowerCase())}]`);
1681
- }
1682
- return lines;
1683
- }
1684
- &nbsp;
1685
- /** snake_case → PascalCase. */
1686
- function snakeToPascal(s: string): string {
1687
- return s
1688
- .split('_')
1689
- .filter(Boolean)
1690
- .map(p =&gt; p.charAt(0).toUpperCase() + p.slice(1))
1691
- .join('');
1692
- }
1693
- &nbsp;
1694
- // ─── URL building ─────────────────────────────────────────────────────────
1695
- &nbsp;
1696
- function buildUrlExpression(path: string): string {
1697
- // Replace {paramName} with Python f-string interpolation
1698
- const hasBraces = /\{[a-zA-Z_][a-zA-Z0-9_]*\}/.test(path);
1699
- if (!hasBraces) return `"${path}"`;
1700
- const interpolated = path.replace(/\{([a-zA-Z_][a-zA-Z0-9_]*)\}/g, (_m, name) =&gt; `{${name}}`);
1701
- return `f"${interpolated}"`;
1702
- }
1703
- &nbsp;
1704
- // ─── Parameter building ───────────────────────────────────────────────────
1705
- &nbsp;
1706
- function buildMethodParams(route: OpRouteNode, op: OpOperationNode, modelsWithInput?: Set&lt;string&gt;): MethodParam[] {
1707
- const params: MethodParam[] = [];
1708
- &nbsp;
1709
- // Path params
1710
- if (route.params) {
1711
- if (route.params.kind === 'params') {
1712
- for (const p of route.params.nodes) {
1713
- params.push({
1714
- name: toPythonFieldName(p.name),
1715
- type: renderPyType(p.type, modelsWithInput),
1716
- optional: false,
1717
- isModel: false,
1718
- });
1719
- }
1720
- } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="else path not taken" >E</span>if (route.params.kind === 'ref') {</span>
1721
- const typeName = <span class="cstat-no" title="statement not covered" >modelsWithInput?.has(route.params.name) ? `${route.params.name}Input` : route.params.name;</span>
1722
- <span class="cstat-no" title="statement not covered" > params.push({ name: 'params', type: typeName, optional: false, isModel: true });</span>
1723
- } else {
1724
- <span class="cstat-no" title="statement not covered" > params.push({ name: 'params', type: renderPyType(route.params.node, modelsWithInput), optional: false, isModel: false });</span>
1725
- }
1726
- }
1727
- &nbsp;
1728
- // Body — use the first declared MIME's body type as the parameter type.
1729
- // Multi-MIME support in Python collapses to a single signature using the primary body.
1730
- const primaryBody = op.request?.bodies[0];
1731
- if (primaryBody) {
1732
- const cat = classifyContentType(primaryBody.contentType);
1733
- <span class="missing-if-branch" title="if path not taken" >I</span>if (cat === 'multipart' || cat === 'binary') {
1734
- <span class="cstat-no" title="statement not covered" > params.push({ name: 'body', type: 'bytes', optional: false, isModel: false });</span>
1735
- } else if (cat === 'text') {
1736
- params.push({ name: 'body', type: 'str', optional: false, isModel: false });
1737
- } else {
1738
- const bodyType = renderInputPyType(primaryBody.bodyType, modelsWithInput);
1739
- const isModel = isModelRef(primaryBody.bodyType, modelsWithInput);
1740
- params.push({ name: 'body', type: bodyType, optional: false, isModel });
1741
- }
1742
- }
1743
- &nbsp;
1744
- // Query
1745
- if (op.query) {
1746
- const queryType = renderParamSourceType(op.query, modelsWithInput, true);
1747
- params.push({ name: 'query', type: queryType, optional: true, isModel: false });
1748
- }
1749
- &nbsp;
1750
- // Headers
1751
- <span class="missing-if-branch" title="if path not taken" >I</span>if (op.headers) {
1752
- const headersType = <span class="cstat-no" title="statement not covered" >renderParamSourceType(op.headers, modelsWithInput, true);</span>
1753
- <span class="cstat-no" title="statement not covered" > params.push({ name: 'custom_headers', type: headersType, optional: true, isModel: false });</span>
1754
- }
1755
- &nbsp;
1756
- return params;
1757
- }
1758
- &nbsp;
1759
- function renderParamSourceType(source: ParamSource, modelsWithInput?: Set&lt;string&gt;, forInput = false): string {
1760
- <span class="missing-if-branch" title="if path not taken" >I</span>if (source.kind === 'ref') {
1761
- const typeName = <span class="cstat-no" title="statement not covered" >forInput &amp;&amp; modelsWithInput?.has(source.name) ? `${source.name}Input` : source.name;</span>
1762
- <span class="cstat-no" title="statement not covered" > return typeName;</span>
1763
- }
1764
- <span class="missing-if-branch" title="else path not taken" >E</span>if (source.kind === 'params') {
1765
- // const fields = source.nodes.map(p =&gt; {
1766
- // const pyName = toPythonFieldName(p.name);
1767
- // return `"${pyName}": ${renderPyType(p.type, modelsWithInput, forInput)}`;
1768
- // });
1769
- return `dict`; // simplified — inline dicts are hard to type concisely in Python signatures
1770
- }
1771
- <span class="cstat-no" title="statement not covered" > return renderPyType(source.node, modelsWithInput, forInput);</span>
1772
- }
1773
- &nbsp;
1774
- function renderInputPyType(type: ContractTypeNode, modelsWithInput?: Set&lt;string&gt;): string {
1775
- return renderPyType(type, modelsWithInput, true);
1776
- }
1777
- &nbsp;
1778
- // ─── Model reference detection ────────────────────────────────────────────
1779
- &nbsp;
1780
- function isModelRef(type: ContractTypeNode, modelsWithInput?: Set&lt;string&gt;): boolean {
1781
- if (type.kind === 'ref') return /^[A-Z]/.test(type.name);
1782
- <span class="missing-if-branch" title="if path not taken" >I</span>if (type.kind === 'lazy') return isModelRef(type.inner, modelsWithInput);
1783
- return false;
1784
- }
1785
- &nbsp;
1786
- function isListModelRef(type: ContractTypeNode, modelsWithInput?: Set&lt;string&gt;): boolean {
1787
- if (type.kind === 'array') return isModelRef(type.item, modelsWithInput);
1788
- <span class="missing-if-branch" title="if path not taken" >I</span>if (type.kind === 'lazy') return isListModelRef(type.inner, modelsWithInput);
1789
- return false;
1790
- }
1791
- &nbsp;
1792
- function getListItemType(type: ContractTypeNode, modelsWithInput?: Set&lt;string&gt;): string {
1793
- <span class="missing-if-branch" title="else path not taken" >E</span>if (type.kind === 'array') return renderPyType(type.item, modelsWithInput);
1794
- <span class="cstat-no" title="statement not covered" > return 'dict';</span>
1795
- }
1796
- &nbsp;
1797
- // ─── Referenced model collection ─────────────────────────────────────────
1798
- &nbsp;
1799
- /**
1800
- * Collect all model names and scalar sentinels referenced in public operations.
1801
- * Sentinels: __datetime__, __date__, __time__, __uuid__, __any__
1802
- */
1803
- function collectReferencedModels(root: OpRootNode, modelsWithInput?: Set&lt;string&gt;, includeInternal = false): Set&lt;string&gt; {
1804
- const refs = new Set&lt;string&gt;();
1805
- &nbsp;
1806
- for (const route of root.routes) {
1807
- for (const op of route.operations) {
1808
- if (!includeInternal &amp;&amp; resolveModifiers(route, op).includes('internal')) continue;
1809
- &nbsp;
1810
- if (route.params) collectParamSourceRefs(route.params, refs, modelsWithInput);
1811
- if (op.request) {
1812
- for (const body of op.request.bodies) collectTypeRefs(body.bodyType, refs, modelsWithInput, true);
1813
- }
1814
- for (const resp of op.responses) {
1815
- if (resp.bodyType) collectTypeRefs(resp.bodyType, refs, modelsWithInput, false);
1816
- }
1817
- if (op.query) collectParamSourceRefs(op.query, refs, modelsWithInput);
1818
- <span class="missing-if-branch" title="if path not taken" >I</span>if (op.headers) collectParamSourceRefs(op.headers, refs, modelsWithInput);
1819
- }
1820
- }
1821
- &nbsp;
1822
- return refs;
1823
- }
1824
- &nbsp;
1825
- function collectParamSourceRefs(source: ParamSource, out: Set&lt;string&gt;, modelsWithInput?: Set&lt;string&gt;): void {
1826
- <span class="missing-if-branch" title="if path not taken" >I</span>if (source.kind === 'ref') {
1827
- <span class="cstat-no" title="statement not covered" > addModelRef(source.name, out, modelsWithInput);</span>
1828
- } else if (source.kind === 'params') {
1829
- for (const p of source.nodes) collectTypeRefs(p.type, out, modelsWithInput);
1830
- } else <span class="missing-if-branch" title="else path not taken" >E</span>{
1831
- <span class="cstat-no" title="statement not covered" > collectTypeRefs(source.node, out, modelsWithInput);</span>
1832
- }
1833
- }
1834
- &nbsp;
1835
- function addModelRef(name: string, out: Set&lt;string&gt;, modelsWithInput?: Set&lt;string&gt;): void {
1836
- <span class="missing-if-branch" title="else path not taken" >E</span>if (/^[A-Z]/.test(name)) {
1837
- out.add(name);
1838
- if (modelsWithInput?.has(name)) out.add(`${name}Input`);
1839
- }
1840
- }
1841
- &nbsp;
1842
- function collectTypeRefs(type: ContractTypeNode, out: Set&lt;string&gt;, modelsWithInput?: Set&lt;string&gt;, forInput = false): void {
1843
- switch (type.kind) {
1844
- case 'scalar':
1845
- switch (type.name) {
1846
- <span class="branch-0 cbranch-no" title="branch not covered" > case 'date':</span>
1847
- <span class="cstat-no" title="statement not covered" > out.add('__date__');</span>
1848
- <span class="cstat-no" title="statement not covered" > break;</span>
1849
- <span class="branch-1 cbranch-no" title="branch not covered" > case 'time':</span>
1850
- <span class="cstat-no" title="statement not covered" > out.add('__time__');</span>
1851
- <span class="cstat-no" title="statement not covered" > break;</span>
1852
- <span class="branch-2 cbranch-no" title="branch not covered" > case 'datetime':</span>
1853
- <span class="cstat-no" title="statement not covered" > out.add('__datetime__');</span>
1854
- <span class="cstat-no" title="statement not covered" > break;</span>
1855
- case 'uuid':
1856
- out.add('__uuid__');
1857
- break;
1858
- <span class="branch-4 cbranch-no" title="branch not covered" > case 'unknown':</span>
1859
- <span class="branch-5 cbranch-no" title="branch not covered" > case 'json':</span>
1860
- <span class="branch-6 cbranch-no" title="branch not covered" > case 'object':</span>
1861
- <span class="cstat-no" title="statement not covered" > out.add('__any__');</span>
1862
- <span class="cstat-no" title="statement not covered" > break;</span>
1863
- }
1864
- break;
1865
- case 'ref':
1866
- if (forInput &amp;&amp; modelsWithInput?.has(type.name)) {
1867
- out.add(`${type.name}Input`);
1868
- } else {
1869
- addModelRef(type.name, out, modelsWithInput);
1870
- }
1871
- break;
1872
- case 'array':
1873
- collectTypeRefs(type.item, out, modelsWithInput, forInput);
1874
- break;
1875
- <span class="branch-3 cbranch-no" title="branch not covered" > case 'tuple':</span>
1876
- <span class="cstat-no" title="statement not covered" > type.items.forEach(<span class="fstat-no" title="function not covered" >t =&gt; <span class="cstat-no" title="statement not covered" >c</span>ollectTypeRefs(t, out, modelsWithInput, forInput));</span></span>
1877
- <span class="cstat-no" title="statement not covered" > break;</span>
1878
- <span class="branch-4 cbranch-no" title="branch not covered" > case 'record':</span>
1879
- <span class="cstat-no" title="statement not covered" > collectTypeRefs(type.key, out, modelsWithInput, forInput);</span>
1880
- <span class="cstat-no" title="statement not covered" > collectTypeRefs(type.value, out, modelsWithInput, forInput);</span>
1881
- <span class="cstat-no" title="statement not covered" > break;</span>
1882
- <span class="branch-5 cbranch-no" title="branch not covered" > case 'union':</span>
1883
- <span class="cstat-no" title="statement not covered" > type.members.forEach(<span class="fstat-no" title="function not covered" >m =&gt; <span class="cstat-no" title="statement not covered" >c</span>ollectTypeRefs(m, out, modelsWithInput, forInput));</span></span>
1884
- <span class="cstat-no" title="statement not covered" > break;</span>
1885
- <span class="branch-6 cbranch-no" title="branch not covered" > case 'discriminatedUnion':</span>
1886
- <span class="cstat-no" title="statement not covered" > type.members.forEach(<span class="fstat-no" title="function not covered" >m =&gt; <span class="cstat-no" title="statement not covered" >c</span>ollectTypeRefs(m, out, modelsWithInput, forInput));</span></span>
1887
- <span class="cstat-no" title="statement not covered" > break;</span>
1888
- <span class="branch-7 cbranch-no" title="branch not covered" > case 'intersection':</span>
1889
- <span class="cstat-no" title="statement not covered" > out.add('__any__');</span>
1890
- <span class="cstat-no" title="statement not covered" > break;</span>
1891
- <span class="branch-8 cbranch-no" title="branch not covered" > case 'lazy':</span>
1892
- <span class="cstat-no" title="statement not covered" > collectTypeRefs(type.inner, out, modelsWithInput, forInput);</span>
1893
- <span class="cstat-no" title="statement not covered" > break;</span>
1894
- <span class="branch-9 cbranch-no" title="branch not covered" > case 'inlineObject':</span>
1895
- <span class="cstat-no" title="statement not covered" > out.add('__any__');</span>
1896
- <span class="cstat-no" title="statement not covered" > break;</span>
1897
- }
1898
- }
1899
- &nbsp;
1900
- // ─── Naming helpers ───────────────────────────────────────────────────────
1901
- &nbsp;
1902
- function deriveBaseName(file: string): string {
1903
- const base =
1904
- file
1905
- .split('/')
1906
- .pop()
1907
- ?.replace(/\.(op\.)?ck$/, '') ?? <span class="branch-1 cbranch-no" title="branch not covered" >'Resource';</span>
1908
- return base
1909
- .split('.')
1910
- .map(s =&gt; s.charAt(0).toUpperCase() + s.slice(1))
1911
- .join('');
1912
- }
1913
- &nbsp;
1914
- export function deriveClientClassName(file: string): string {
1915
- return `${deriveBaseName(file)}Client`;
1916
- }
1917
- &nbsp;
1918
- export function deriveClientModuleName(file: string): string {
1919
- const base =
1920
- file
1921
- .split('/')
1922
- .pop()
1923
- ?.replace(/\.(op\.)?ck$/, '') ?? <span class="branch-1 cbranch-no" title="branch not covered" >'client';</span>
1924
- const clean = base.replace(/[^a-zA-Z0-9]/g, '_').toLowerCase();
1925
- return `_client_${clean}`;
1926
- }
1927
- &nbsp;
1928
- export function <span class="fstat-no" title="function not covered" >deriveClientPropertyName(f</span>ile: string): string {
1929
- const base = <span class="cstat-no" title="statement not covered" >deriveBaseName(file);</span>
1930
- <span class="cstat-no" title="statement not covered" > return base.charAt(0).toLowerCase() + base.slice(1);</span>
1931
- }
1932
- &nbsp;
1933
- function deriveMethodName(op: OpOperationNode, route: OpRouteNode): string {
1934
- if (op.sdk) return toSnakeCase(op.sdk);
1935
- if (op.name) return toSnakeCase(op.name);
1936
- return inferMethodName(op.method, route.path);
1937
- }
1938
- &nbsp;
1939
- function inferMethodName(method: string, path: string): string {
1940
- const segments = path.split('/').filter(s =&gt; s.length &gt; 0);
1941
- const parts: string[] = [method.toLowerCase()];
1942
- &nbsp;
1943
- for (const seg of segments) {
1944
- if (seg.startsWith('{')) {
1945
- const paramName = seg.slice(1, -1);
1946
- parts.push('by_' + toSnakeCase(paramName));
1947
- } else {
1948
- parts.push(toSnakeCase(seg.replace(/[.-]/g, '_')));
1949
- }
1950
- }
1951
- &nbsp;
1952
- return parts.join('_').replace(/_+/g, '_');
1953
- }
1954
- &nbsp;
1955
- function toSnakeCase(s: string): string {
1956
- return s
1957
- .replace(/([a-z0-9])([A-Z])/g, '$1_$2')
1958
- .replace(/[^a-zA-Z0-9]/g, '_')
1959
- .toLowerCase()
1960
- .replace(/_+/g, '_')
1961
- .replace(/^_|_$/g, '');
1962
- }
1963
- &nbsp;
1964
- // ─── Shared base client content ───────────────────────────────────────────
1965
- &nbsp;
1966
- export const BASE_CLIENT_PY = `# Auto-generated by contractkit-plugin-python-sdk. Do not edit manually.
1967
- from __future__ import annotations
1968
- &nbsp;
1969
- import httpx
1970
- from typing import Any
1971
- &nbsp;
1972
- &nbsp;
1973
- class SdkError(Exception):
1974
- def __init__(self, status: int, status_text: str, body: Any):
1975
- super().__init__(f"{status} {status_text}")
1976
- self.status = status
1977
- self.status_text = status_text
1978
- self.body = body
1979
- &nbsp;
1980
- &nbsp;
1981
- class BaseClient:
1982
- def __init__(self, base_url: str, headers: dict[str, str] | None = None):
1983
- self._base_url = base_url.rstrip("/")
1984
- self._headers = headers or {}
1985
- self._http = httpx.AsyncClient()
1986
- &nbsp;
1987
- async def _fetch(
1988
- self,
1989
- path: str,
1990
- *,
1991
- method: str,
1992
- body: Any = None,
1993
- params: dict | None = None,
1994
- extra_headers: dict | None = None,
1995
- content_type: str | None = None,
1996
- body_kind: str = "json",
1997
- response_kind: str = "json",
1998
- ) -&gt; Any:
1999
- result, _ = await self._fetch_with_headers(
2000
- path,
2001
- method=method,
2002
- body=body,
2003
- params=params,
2004
- extra_headers=extra_headers,
2005
- content_type=content_type,
2006
- body_kind=body_kind,
2007
- response_kind=response_kind,
2008
- )
2009
- return result
2010
- &nbsp;
2011
- async def _fetch_with_headers(
2012
- self,
2013
- path: str,
2014
- *,
2015
- method: str,
2016
- body: Any = None,
2017
- params: dict | None = None,
2018
- extra_headers: dict | None = None,
2019
- content_type: str | None = None,
2020
- body_kind: str = "json",
2021
- response_kind: str = "json",
2022
- ) -&gt; tuple[Any, dict[str, str]]:
2023
- headers = {**self._headers, **(extra_headers or {})}
2024
- if body is not None:
2025
- headers["Content-Type"] = content_type or "application/json"
2026
- # body_kind controls how httpx serializes the request body:
2027
- # "json" — body is a JSON-serializable object, sent via httpx's json= kwarg
2028
- # "text"/"binary" — body is a raw str/bytes payload, sent via content= unchanged
2029
- request_kwargs: dict[str, Any] = {"method": method, "url": f"{self._base_url}{path}", "params": params, "headers": headers}
2030
- if body is not None:
2031
- if body_kind == "json":
2032
- request_kwargs["json"] = body
2033
- else:
2034
- request_kwargs["content"] = body
2035
- response = await self._http.request(**request_kwargs)
2036
- if not response.is_success:
2037
- try:
2038
- error_body = response.json()
2039
- except Exception:
2040
- error_body = response.text
2041
- raise SdkError(response.status_code, response.reason_phrase, error_body)
2042
- # HTTP headers are case-insensitive — normalize to lowercase keys for stable lookup.
2043
- response_headers = {k.lower(): v for k, v in response.headers.items()}
2044
- if response.status_code == 204 or not response.content:
2045
- return None, response_headers
2046
- if response_kind == "text":
2047
- return response.text, response_headers
2048
- if response_kind == "binary":
2049
- return response.content, response_headers
2050
- return response.json(), response_headers
2051
- `;
2052
- &nbsp;</pre></td></tr></table></pre>
2053
-
2054
- <div class='push'></div><!-- for sticky footer -->
2055
- </div><!-- /wrapper -->
2056
- <div class='footer quiet pad2 space-top1 center small'>
2057
- Code coverage generated by
2058
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2059
- at 2026-06-16T15:55:43.170Z
2060
- </div>
2061
- <script src="../prettify.js"></script>
2062
- <script>
2063
- window.onload = function () {
2064
- prettyPrint();
2065
- };
2066
- </script>
2067
- <script src="../sorter.js"></script>
2068
- <script src="../block-navigation.js"></script>
2069
- </body>
2070
- </html>
2071
-