cdk-common 2.0.189 → 2.0.192

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.
Files changed (60) hide show
  1. package/.jsii +3 -3
  2. package/lib/main.js +1 -1
  3. package/node_modules/@aws-cdk/assert/package.json +8 -8
  4. package/node_modules/@aws-cdk/cfnspec/build-tools/create-missing-libraries.js +2 -2
  5. package/node_modules/@aws-cdk/cfnspec/package.json +3 -3
  6. package/node_modules/@aws-cdk/cfnspec/tsconfig.tsbuildinfo +1 -1
  7. package/node_modules/@aws-cdk/cloudformation-diff/package.json +4 -4
  8. package/package.json +3 -3
  9. package/node_modules/@aws-cdk/cfnspec/coverage/base.css +0 -224
  10. package/node_modules/@aws-cdk/cfnspec/coverage/block-navigation.js +0 -87
  11. package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/index.html +0 -161
  12. package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/massage-spec.ts.html +0 -295
  13. package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/patch-set.ts.html +0 -907
  14. package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/scrutiny.ts.html +0 -349
  15. package/node_modules/@aws-cdk/cfnspec/coverage/build-tools/validate-cfn.ts.html +0 -1093
  16. package/node_modules/@aws-cdk/cfnspec/coverage/favicon.png +0 -0
  17. package/node_modules/@aws-cdk/cfnspec/coverage/index.html +0 -161
  18. package/node_modules/@aws-cdk/cfnspec/coverage/junit.xml +0 -35617
  19. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/base.css +0 -224
  20. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/block-navigation.js +0 -87
  21. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/index.html +0 -161
  22. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/massage-spec.ts.html +0 -295
  23. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/patch-set.ts.html +0 -907
  24. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/scrutiny.ts.html +0 -349
  25. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/build-tools/validate-cfn.ts.html +0 -1093
  26. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/favicon.png +0 -0
  27. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/index.html +0 -161
  28. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/canned-metrics/canned-metrics-schema.ts.html +0 -304
  29. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/canned-metrics/index.html +0 -116
  30. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/canned-metrics.ts.html +0 -445
  31. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/index.html +0 -131
  32. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/index.ts.html +0 -634
  33. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/augmentation.ts.html +0 -376
  34. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/base-types.ts.html +0 -172
  35. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/index.html +0 -191
  36. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/index.ts.html +0 -103
  37. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/property.ts.html +0 -1003
  38. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/resource-type.ts.html +0 -577
  39. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/lib/schema/specification.ts.html +0 -253
  40. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/prettify.css +0 -1
  41. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/prettify.js +0 -2
  42. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  43. package/node_modules/@aws-cdk/cfnspec/coverage/lcov-report/sorter.js +0 -196
  44. package/node_modules/@aws-cdk/cfnspec/coverage/lcov.info +0 -1112
  45. package/node_modules/@aws-cdk/cfnspec/coverage/lib/canned-metrics/canned-metrics-schema.ts.html +0 -304
  46. package/node_modules/@aws-cdk/cfnspec/coverage/lib/canned-metrics/index.html +0 -116
  47. package/node_modules/@aws-cdk/cfnspec/coverage/lib/canned-metrics.ts.html +0 -445
  48. package/node_modules/@aws-cdk/cfnspec/coverage/lib/index.html +0 -131
  49. package/node_modules/@aws-cdk/cfnspec/coverage/lib/index.ts.html +0 -634
  50. package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/augmentation.ts.html +0 -376
  51. package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/base-types.ts.html +0 -172
  52. package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/index.html +0 -191
  53. package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/index.ts.html +0 -103
  54. package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/property.ts.html +0 -1003
  55. package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/resource-type.ts.html +0 -577
  56. package/node_modules/@aws-cdk/cfnspec/coverage/lib/schema/specification.ts.html +0 -253
  57. package/node_modules/@aws-cdk/cfnspec/coverage/prettify.css +0 -1
  58. package/node_modules/@aws-cdk/cfnspec/coverage/prettify.js +0 -2
  59. package/node_modules/@aws-cdk/cfnspec/coverage/sort-arrow-sprite.png +0 -0
  60. package/node_modules/@aws-cdk/cfnspec/coverage/sorter.js +0 -196
@@ -1,1093 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for build-tools/validate-cfn.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">build-tools</a> validate-cfn.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">72.41% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>84/116</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">68.57% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>24/35</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">75.75% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>25/33</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">71.81% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>79/110</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 oninput="onInput()" 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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
403
- <span class="cline-any cline-neutral">&nbsp;</span>
404
- <span class="cline-any cline-neutral">&nbsp;</span>
405
- <span class="cline-any cline-neutral">&nbsp;</span>
406
- <span class="cline-any cline-neutral">&nbsp;</span>
407
- <span class="cline-any cline-neutral">&nbsp;</span>
408
- <span class="cline-any cline-neutral">&nbsp;</span>
409
- <span class="cline-any cline-neutral">&nbsp;</span>
410
- <span class="cline-any cline-neutral">&nbsp;</span>
411
- <span class="cline-any cline-neutral">&nbsp;</span>
412
- <span class="cline-any cline-neutral">&nbsp;</span>
413
- <span class="cline-any cline-neutral">&nbsp;</span>
414
- <span class="cline-any cline-neutral">&nbsp;</span>
415
- <span class="cline-any cline-neutral">&nbsp;</span>
416
- <span class="cline-any cline-neutral">&nbsp;</span>
417
- <span class="cline-any cline-neutral">&nbsp;</span>
418
- <span class="cline-any cline-neutral">&nbsp;</span>
419
- <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-neutral">&nbsp;</span>
423
- <span class="cline-any cline-neutral">&nbsp;</span>
424
- <span class="cline-any cline-neutral">&nbsp;</span>
425
- <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-neutral">&nbsp;</span>
427
- <span class="cline-any cline-neutral">&nbsp;</span>
428
- <span class="cline-any cline-neutral">&nbsp;</span>
429
- <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-neutral">&nbsp;</span>
431
- <span class="cline-any cline-neutral">&nbsp;</span>
432
- <span class="cline-any cline-neutral">&nbsp;</span>
433
- <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-neutral">&nbsp;</span>
435
- <span class="cline-any cline-neutral">&nbsp;</span>
436
- <span class="cline-any cline-neutral">&nbsp;</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-neutral">&nbsp;</span>
439
- <span class="cline-any cline-neutral">&nbsp;</span>
440
- <span class="cline-any cline-neutral">&nbsp;</span>
441
- <span class="cline-any cline-neutral">&nbsp;</span>
442
- <span class="cline-any cline-neutral">&nbsp;</span>
443
- <span class="cline-any cline-neutral">&nbsp;</span>
444
- <span class="cline-any cline-neutral">&nbsp;</span>
445
- <span class="cline-any cline-neutral">&nbsp;</span>
446
- <span class="cline-any cline-neutral">&nbsp;</span>
447
- <span class="cline-any cline-yes">1x</span>
448
- <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-neutral">&nbsp;</span>
450
- <span class="cline-any cline-neutral">&nbsp;</span>
451
- <span class="cline-any cline-neutral">&nbsp;</span>
452
- <span class="cline-any cline-neutral">&nbsp;</span>
453
- <span class="cline-any cline-neutral">&nbsp;</span>
454
- <span class="cline-any cline-neutral">&nbsp;</span>
455
- <span class="cline-any cline-neutral">&nbsp;</span>
456
- <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-neutral">&nbsp;</span>
459
- <span class="cline-any cline-neutral">&nbsp;</span>
460
- <span class="cline-any cline-yes">1x</span>
461
- <span class="cline-any cline-neutral">&nbsp;</span>
462
- <span class="cline-any cline-yes">7x</span>
463
- <span class="cline-any cline-yes">7x</span>
464
- <span class="cline-any cline-yes">7x</span>
465
- <span class="cline-any cline-neutral">&nbsp;</span>
466
- <span class="cline-any cline-neutral">&nbsp;</span>
467
- <span class="cline-any cline-yes">7x</span>
468
- <span class="cline-any cline-neutral">&nbsp;</span>
469
- <span class="cline-any cline-neutral">&nbsp;</span>
470
- <span class="cline-any cline-neutral">&nbsp;</span>
471
- <span class="cline-any cline-yes">7x</span>
472
- <span class="cline-any cline-neutral">&nbsp;</span>
473
- <span class="cline-any cline-neutral">&nbsp;</span>
474
- <span class="cline-any cline-neutral">&nbsp;</span>
475
- <span class="cline-any cline-yes">7x</span>
476
- <span class="cline-any cline-yes">7x</span>
477
- <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-yes">7x</span>
480
- <span class="cline-any cline-yes">7x</span>
481
- <span class="cline-any cline-neutral">&nbsp;</span>
482
- <span class="cline-any cline-neutral">&nbsp;</span>
483
- <span class="cline-any cline-neutral">&nbsp;</span>
484
- <span class="cline-any cline-neutral">&nbsp;</span>
485
- <span class="cline-any cline-neutral">&nbsp;</span>
486
- <span class="cline-any cline-neutral">&nbsp;</span>
487
- <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-neutral">&nbsp;</span>
489
- <span class="cline-any cline-neutral">&nbsp;</span>
490
- <span class="cline-any cline-neutral">&nbsp;</span>
491
- <span class="cline-any cline-neutral">&nbsp;</span>
492
- <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-neutral">&nbsp;</span>
494
- <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-neutral">&nbsp;</span>
496
- <span class="cline-any cline-neutral">&nbsp;</span>
497
- <span class="cline-any cline-neutral">&nbsp;</span>
498
- <span class="cline-any cline-neutral">&nbsp;</span>
499
- <span class="cline-any cline-neutral">&nbsp;</span>
500
- <span class="cline-any cline-neutral">&nbsp;</span>
501
- <span class="cline-any cline-neutral">&nbsp;</span>
502
- <span class="cline-any cline-neutral">&nbsp;</span>
503
- <span class="cline-any cline-yes">7x</span>
504
- <span class="cline-any cline-no">&nbsp;</span>
505
- <span class="cline-any cline-neutral">&nbsp;</span>
506
- <span class="cline-any cline-neutral">&nbsp;</span>
507
- <span class="cline-any cline-yes">7x</span>
508
- <span class="cline-any cline-yes">7x</span>
509
- <span class="cline-any cline-yes">7x</span>
510
- <span class="cline-any cline-yes">7x</span>
511
- <span class="cline-any cline-neutral">&nbsp;</span>
512
- <span class="cline-any cline-neutral">&nbsp;</span>
513
- <span class="cline-any cline-no">&nbsp;</span>
514
- <span class="cline-any cline-neutral">&nbsp;</span>
515
- <span class="cline-any cline-neutral">&nbsp;</span>
516
- <span class="cline-any cline-neutral">&nbsp;</span>
517
- <span class="cline-any cline-neutral">&nbsp;</span>
518
- <span class="cline-any cline-yes">7x</span>
519
- <span class="cline-any cline-yes">7x</span>
520
- <span class="cline-any cline-neutral">&nbsp;</span>
521
- <span class="cline-any cline-neutral">&nbsp;</span>
522
- <span class="cline-any cline-yes">7x</span>
523
- <span class="cline-any cline-no">&nbsp;</span>
524
- <span class="cline-any cline-no">&nbsp;</span>
525
- <span class="cline-any cline-neutral">&nbsp;</span>
526
- <span class="cline-any cline-neutral">&nbsp;</span>
527
- <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-neutral">&nbsp;</span>
530
- <span class="cline-any cline-yes">14x</span>
531
- <span class="cline-any cline-yes">14x</span>
532
- <span class="cline-any cline-neutral">&nbsp;</span>
533
- <span class="cline-any cline-yes">14x</span>
534
- <span class="cline-any cline-no">&nbsp;</span>
535
- <span class="cline-any cline-no">&nbsp;</span>
536
- <span class="cline-any cline-neutral">&nbsp;</span>
537
- <span class="cline-any cline-neutral">&nbsp;</span>
538
- <span class="cline-any cline-neutral">&nbsp;</span>
539
- <span class="cline-any cline-neutral">&nbsp;</span>
540
- <span class="cline-any cline-neutral">&nbsp;</span>
541
- <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-neutral">&nbsp;</span>
544
- <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-neutral">&nbsp;</span>
549
- <span class="cline-any cline-neutral">&nbsp;</span>
550
- <span class="cline-any cline-yes">14x</span>
551
- <span class="cline-any cline-yes">14x</span>
552
- <span class="cline-any cline-neutral">&nbsp;</span>
553
- <span class="cline-any cline-yes">14x</span>
554
- <span class="cline-any cline-yes">2x</span>
555
- <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-neutral">&nbsp;</span>
557
- <span class="cline-any cline-neutral">&nbsp;</span>
558
- <span class="cline-any cline-neutral">&nbsp;</span>
559
- <span class="cline-any cline-neutral">&nbsp;</span>
560
- <span class="cline-any cline-yes">14x</span>
561
- <span class="cline-any cline-neutral">&nbsp;</span>
562
- <span class="cline-any cline-yes">14x</span>
563
- <span class="cline-any cline-yes">14x</span>
564
- <span class="cline-any cline-yes">14x</span>
565
- <span class="cline-any cline-neutral">&nbsp;</span>
566
- <span class="cline-any cline-yes">14x</span>
567
- <span class="cline-any cline-yes">4x</span>
568
- <span class="cline-any cline-yes">4x</span>
569
- <span class="cline-any cline-yes">2x</span>
570
- <span class="cline-any cline-yes">2x</span>
571
- <span class="cline-any cline-neutral">&nbsp;</span>
572
- <span class="cline-any cline-neutral">&nbsp;</span>
573
- <span class="cline-any cline-neutral">&nbsp;</span>
574
- <span class="cline-any cline-neutral">&nbsp;</span>
575
- <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-yes">2x</span>
577
- <span class="cline-any cline-yes">2x</span>
578
- <span class="cline-any cline-yes">1x</span>
579
- <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-yes">2x</span>
582
- <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-yes">14x</span>
586
- <span class="cline-any cline-yes">12x</span>
587
- <span class="cline-any cline-yes">2x</span>
588
- <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-neutral">&nbsp;</span>
590
- <span class="cline-any cline-neutral">&nbsp;</span>
591
- <span class="cline-any cline-yes">14x</span>
592
- <span class="cline-any cline-yes">14x</span>
593
- <span class="cline-any cline-no">&nbsp;</span>
594
- <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-neutral">&nbsp;</span>
596
- <span class="cline-any cline-neutral">&nbsp;</span>
597
- <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-yes">3x</span>
599
- <span class="cline-any cline-no">&nbsp;</span>
600
- <span class="cline-any cline-neutral">&nbsp;</span>
601
- <span class="cline-any cline-neutral">&nbsp;</span>
602
- <span class="cline-any cline-yes">3x</span>
603
- <span class="cline-any cline-yes">3x</span>
604
- <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-yes">3x</span>
606
- <span class="cline-any cline-yes">3x</span>
607
- <span class="cline-any cline-yes">1x</span>
608
- <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-yes">44x</span>
613
- <span class="cline-any cline-neutral">&nbsp;</span>
614
- <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-yes">39x</span>
617
- <span class="cline-any cline-yes">39x</span>
618
- <span class="cline-any cline-yes">39x</span>
619
- <span class="cline-any cline-yes">28x</span>
620
- <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-yes">39x</span>
622
- <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-no">&nbsp;</span>
624
- <span class="cline-any cline-no">&nbsp;</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-neutral">&nbsp;</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-yes">28x</span>
630
- <span class="cline-any cline-yes">28x</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-neutral">&nbsp;</span>
635
- <span class="cline-any cline-yes">7x</span>
636
- <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-yes">28x</span>
641
- <span class="cline-any cline-no">&nbsp;</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-yes">1x</span>
646
- <span class="cline-any cline-yes">1x</span>
647
- <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-yes">11x</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-yes">11x</span>
652
- <span class="cline-any cline-no">&nbsp;</span>
653
- <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-neutral">&nbsp;</span>
656
- <span class="cline-any cline-neutral">&nbsp;</span>
657
- <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-neutral">&nbsp;</span>
659
- <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-neutral">&nbsp;</span>
664
- <span class="cline-any cline-neutral">&nbsp;</span>
665
- <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-neutral">&nbsp;</span>
667
- <span class="cline-any cline-yes">7x</span>
668
- <span class="cline-any cline-neutral">&nbsp;</span>
669
- <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-yes">114x</span>
671
- <span class="cline-any cline-yes">114x</span>
672
- <span class="cline-any cline-yes">114x</span>
673
- <span class="cline-any cline-neutral">&nbsp;</span>
674
- <span class="cline-any cline-yes">114x</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-yes">153x</span>
679
- <span class="cline-any cline-no">&nbsp;</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-yes">153x</span>
682
- <span class="cline-any cline-yes">153x</span>
683
- <span class="cline-any cline-yes">74x</span>
684
- <span class="cline-any cline-neutral">&nbsp;</span>
685
- <span class="cline-any cline-yes">79x</span>
686
- <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-neutral">&nbsp;</span>
690
- <span class="cline-any cline-yes">74x</span>
691
- <span class="cline-any cline-yes">74x</span>
692
- <span class="cline-any cline-neutral">&nbsp;</span>
693
- <span class="cline-any cline-yes">74x</span>
694
- <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-no">&nbsp;</span>
698
- <span class="cline-any cline-neutral">&nbsp;</span>
699
- <span class="cline-any cline-neutral">&nbsp;</span>
700
- <span class="cline-any cline-neutral">&nbsp;</span>
701
- <span class="cline-any cline-no">&nbsp;</span>
702
- <span class="cline-any cline-neutral">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-neutral">&nbsp;</span>
705
- <span class="cline-any cline-yes">1x</span>
706
- <span class="cline-any cline-no">&nbsp;</span>
707
- <span class="cline-any cline-no">&nbsp;</span>
708
- <span class="cline-any cline-no">&nbsp;</span>
709
- <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-neutral">&nbsp;</span>
711
- <span class="cline-any cline-no">&nbsp;</span>
712
- <span class="cline-any cline-neutral">&nbsp;</span>
713
- <span class="cline-any cline-no">&nbsp;</span>
714
- <span class="cline-any cline-neutral">&nbsp;</span>
715
- <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-no">&nbsp;</span>
717
- <span class="cline-any cline-neutral">&nbsp;</span>
718
- <span class="cline-any cline-no">&nbsp;</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-neutral">&nbsp;</span>
721
- <span class="cline-any cline-neutral">&nbsp;</span>
722
- <span class="cline-any cline-no">&nbsp;</span>
723
- <span class="cline-any cline-no">&nbsp;</span>
724
- <span class="cline-any cline-no">&nbsp;</span>
725
- <span class="cline-any cline-no">&nbsp;</span>
726
- <span class="cline-any cline-no">&nbsp;</span>
727
- <span class="cline-any cline-neutral">&nbsp;</span>
728
- <span class="cline-any cline-no">&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-yes">1x</span>
733
- <span class="cline-any cline-no">&nbsp;</span>
734
- <span class="cline-any cline-no">&nbsp;</span>
735
- <span class="cline-any cline-neutral">&nbsp;</span>
736
- <span class="cline-any cline-no">&nbsp;</span>
737
- <span class="cline-any cline-neutral">&nbsp;</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/* eslint-disable no-console */
739
- /**
740
- * CloudFormation spec validator
741
- *
742
- * "Why not JSON Schema?", you might ask, and it's a fair question. The answer is:
743
- * because the error reporting from JSON schema is pretty bad, and I want the validation
744
- * errors reported from this check to be blindingly obvious, as non-spec-experts
745
- * are going to have to consume and understand them.
746
- *
747
- * I tried JSON Schema validation and its errors look like:
748
- *
749
- * ```
750
- * - instance.PropertyTypes["..."].Properties.Xyz does not match allOf schema &lt;#/definitions/Typed&gt; with 7 error[s]:
751
- * - instance.PropertyTypes["..."].Properties.Xyz requires property "PrimitiveType"
752
- * - instance.PropertyTypes["..."].Properties.Xyz requires property "Type"
753
- * - instance.PropertyTypes["..."].Properties.Xyz requires property "Type"
754
- * - instance.PropertyTypes["..."].Properties.Xyz requires property "ItemType"
755
- * - instance.PropertyTypes["..."].Properties.Xyz requires property "Type"
756
- * - instance.PropertyTypes["..."].Properties.Xyz requires property "PrimitiveItemType"
757
- * - instance.PropertyTypes["..."].Properties.Xyz is not exactly one from "Primitive","Complex Type","Collection of Primitives","Collection of Complex Types"
758
- * ```
759
- *
760
- * No bueno. In contrast, this script prints:
761
- *
762
- * ```
763
- * {
764
- * "ResourceTypes": {
765
- * "AWS::SageMaker::Device": {
766
- * "Properties": {
767
- * "Device": {
768
- *
769
- * !!! must have exactly one of 'Type', 'PrimitiveType', found: {"Type":"Device","PrimitiveType":"Json"} !!!
770
- *
771
- * "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sagemaker-device.html#cfn-sagemaker-device-device",
772
- * "UpdateType": "Mutable",
773
- * "Required": false,
774
- * "PrimitiveType": "Json",
775
- * "Type": "Device"
776
- * }
777
- * }
778
- * }
779
- * }
780
- * }
781
- * ```
782
- */
783
- import * as fs from 'fs-extra';
784
- &nbsp;
785
- export interface CfnSpec {
786
- PropertyTypes: Record&lt;string, any&gt;;
787
- ResourceTypes: Record&lt;string, any&gt;;
788
- ResourceSpecificationVersion: string;
789
- }
790
- &nbsp;
791
- export interface ValidationError {
792
- readonly value: JsonValue&lt;any&gt;;
793
- readonly message: string;
794
- }
795
- &nbsp;
796
- export class CfnSpecValidator {
797
- public static validate(spec: CfnSpec) {
798
- const ret = new CfnSpecValidator(spec);
799
- ret.validateSpec();
800
- return ret.errors;
801
- }
802
- &nbsp;
803
- public readonly errors = new Array&lt;ValidationError&gt;();
804
- private readonly root: JsonValue&lt;CfnSpec&gt;;
805
- &nbsp;
806
- constructor(spec: CfnSpec) {
807
- this.root = JsonValue.of(spec);
808
- }
809
- &nbsp;
810
- public validateSpec() {
811
- this.assert(this.root.get('PropertyTypes'), isObject, (propTypes) =&gt; {
812
- this.validateMap(propTypes, (propType) =&gt; this.validatePropertyType(propType));
813
- });
814
- &nbsp;
815
- this.assert(this.root.get('ResourceTypes'), isObject, (resTypes) =&gt; {
816
- this.validateMap(resTypes, (propType) =&gt; this.validateResourceType(propType));
817
- });
818
- }
819
- &nbsp;
820
- /**
821
- * Property types are extremely weird
822
- *
823
- * Nominally, they define "records" that have a `Properties` field with the defined
824
- * properties.
825
- *
826
- * However, they are also commonly used as aliases for other types, meaning they have
827
- * the same type-indicating fields as individual property *fields* would have.
828
- *
829
- * Also also, it seems to be quite common to have them empty--have no fields at all.
830
- * This seems to be taken as an alias for an unstructured `Json` type. It's probably
831
- * just a mistake, but unfortunately a mistake that S3 is participating in, so if we
832
- * fail on that we won't be able to consume updates to S3's schema. Our codegen is
833
- * ready to deal with this and just renders it to an empty struct.
834
- */
835
- private validatePropertyType(propType: JsonValue&lt;Record&lt;string, any&gt;&gt;) {
836
- // If the only set of properties is "Documentation", we take this to be an alias
837
- // for an empty struct and allow it. I feel icky allowing this, but it seems to
838
- // be pragmatic for now.
839
- <span class="missing-if-branch" title="if path not taken" >I</span>if (Object.keys(propType.value).join(',') === 'Documentation') {
840
- <span class="cstat-no" title="statement not covered" > return;</span>
841
- }
842
- &nbsp;
843
- const properties = propType.get('Properties');
844
- if (properties.hasValue) {
845
- this.assert(properties, isObject, (props) =&gt; {
846
- this.validateProperties(props);
847
- });
848
- } else <span class="missing-if-branch" title="else path not taken" >E</span>{
849
- <span class="cstat-no" title="statement not covered" > this.validateType(propType, 'if a property type doesn\'t have "Properties", it ');</span>
850
- }
851
- }
852
- &nbsp;
853
- private validateResourceType(resType: JsonValue&lt;any&gt;) {
854
- this.assertOptional(resType.get('Properties'), isObject, (props) =&gt; {
855
- this.validateProperties(props);
856
- });
857
- &nbsp;
858
- this.assertOptional(resType.get('Attributes'), isObject, <span class="fstat-no" title="function not covered" >(a</span>ttrs) =&gt; {
859
- <span class="cstat-no" title="statement not covered" > this.validateMap(attrs, <span class="fstat-no" title="function not covered" >attr </span>=&gt; {</span>
860
- <span class="cstat-no" title="statement not covered" > this.validateType(attr);</span>
861
- });
862
- });
863
- }
864
- &nbsp;
865
- private validateProperties(properties: JsonValue&lt;Record&lt;string, any&gt;&gt;) {
866
- this.validateMap(properties, prop =&gt; {
867
- this.validateType(prop);
868
- &nbsp;
869
- this.assertOptional(prop.get('UpdateType'), <span class="fstat-no" title="function not covered" >(x</span>: any) =&gt; {
870
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!['Mutable', 'Immutable', 'Conditional'].includes(x)) {</span>
871
- <span class="cstat-no" title="statement not covered" > throw new Error(`invalid value for enum: '${x}'`);</span>
872
- }
873
- });
874
- });
875
- }
876
- &nbsp;
877
- /**
878
- * Validate the type
879
- *
880
- * There must be:
881
- * - Either Type or PrimitiveType
882
- * - Only if Type is List or Map, there will be either an ItemType or a PrimitiveItemType
883
- * - Non-primitive Types must correspond to a property type
884
- */
885
- private validateType(typedObject: JsonValue&lt;Record&lt;string, any&gt;&gt;, errorPrefix = '') {
886
- const type = typedObject.get('Type');
887
- const primitiveType = typedObject.get('PrimitiveType');
888
- &nbsp;
889
- if (type.hasValue === primitiveType.hasValue) {
890
- this.report(typedObject, `${errorPrefix}must have exactly one of 'Type', 'PrimitiveType', found: ${JSON.stringify({
891
- Type: type.valueOrUndefined,
892
- PrimitiveType: primitiveType.valueOrUndefined,
893
- })}`);
894
- }
895
- &nbsp;
896
- this.assertOptional(primitiveType, isValidPrimitive);
897
- &nbsp;
898
- let isCollectionType = false;
899
- const itemType = typedObject.get('ItemType');
900
- const primitiveItemType = typedObject.get('PrimitiveItemType');
901
- &nbsp;
902
- if (type.hasValue) {
903
- isCollectionType = COLLECTION_TYPES.includes(type.value);
904
- if (isCollectionType) {
905
- if (itemType.hasValue === primitiveItemType.hasValue) {
906
- this.report(typedObject, `must have exactly one of 'ItemType', 'PrimitiveItemType', found: ${JSON.stringify({
907
- ItemType: itemType.valueOrUndefined,
908
- PrimitiveItemType: primitiveItemType.valueOrUndefined,
909
- })}`);
910
- }
911
- &nbsp;
912
- this.assertOptional(primitiveItemType, isValidPrimitive);
913
- if (itemType.hasValue) {
914
- this.assertValidPropertyTypeReference(itemType);
915
- }
916
- } else {
917
- this.assertValidPropertyTypeReference(type);
918
- }
919
- }
920
- &nbsp;
921
- if (!isCollectionType) {
922
- if (itemType.hasValue || primitiveItemType.hasValue) {
923
- this.report(typedObject, 'only \'List\' or \'Map\' types can have \'ItemType\', \'PrimitiveItemType\'');
924
- }
925
- }
926
- &nbsp;
927
- const dupes = typedObject.get('DuplicatesAllowed');
928
- <span class="missing-if-branch" title="if path not taken" >I</span>if (dupes.hasValue &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >!isCollectionType)</span> {
929
- <span class="cstat-no" title="statement not covered" > this.report(dupes, 'occurs on non-collection type');</span>
930
- }
931
- }
932
- &nbsp;
933
- private assertValidPropertyTypeReference(typeName: JsonValue&lt;string&gt;) {
934
- <span class="missing-if-branch" title="if path not taken" >I</span>if (BUILTIN_COMPLEX_TYPES.includes(typeName.value)) {
935
- <span class="cstat-no" title="statement not covered" > return;</span>
936
- }
937
- &nbsp;
938
- const cfnName = typeName.path[1]; // AWS::Xyz::Resource[.Property]
939
- const namespace = cfnName.split('.')[0];
940
- &nbsp;
941
- const propTypeName = `${namespace}.${typeName.value}`;
942
- if (!this.root.get('PropertyTypes').get(propTypeName).hasValue) {
943
- this.report(typeName, `unknown property type name '${typeName.value}' (missing definition for '${propTypeName}')`);
944
- }
945
- }
946
- &nbsp;
947
- private assertOptional&lt;A, B extends A&gt;(x: JsonValue&lt;A&gt;, pred: (x: A) =&gt; asserts x is B, block?: (x: JsonValue&lt;B&gt;) =&gt; void): boolean {
948
- return x.hasValue ? this.assert(x, pred, block) : true;
949
- }
950
- &nbsp;
951
- private assert&lt;A, B extends A&gt;(x: JsonValue&lt;A&gt;, pred: (x: A) =&gt; asserts x is B, block?: (x: JsonValue&lt;B&gt;) =&gt; void): boolean {
952
- try {
953
- pred(x.value);
954
- if (block) {
955
- block(new JsonValue(x.value, x.path));
956
- }
957
- return true;
958
- } catch (e) {
959
- <span class="cstat-no" title="statement not covered" > this.report(x, e.message);</span>
960
- <span class="cstat-no" title="statement not covered" > return false;</span>
961
- }
962
- }
963
- &nbsp;
964
- private validateMap&lt;A&gt;(x: JsonValue&lt;Record&lt;string, A&gt;&gt;, block: (x: JsonValue&lt;A&gt;) =&gt; void) {
965
- for (const key in x.value) {
966
- block(x.get(key));
967
- }
968
- }
969
- &nbsp;
970
- private report(value: JsonValue&lt;any&gt;, message: string) {
971
- this.errors.push({ value, message });
972
- }
973
- }
974
- &nbsp;
975
- function isObject(x: any): asserts x is Record&lt;string, any&gt; {
976
- <span class="missing-if-branch" title="if path not taken" >I</span>if (x == null || typeof x !== 'object' || Array.isArray(x)) {
977
- <span class="cstat-no" title="statement not covered" > throw new Error(`expected object, found '${x}'`);</span>
978
- }
979
- }
980
- &nbsp;
981
- const COLLECTION_TYPES = ['List', 'Map'];
982
- const BUILTIN_COMPLEX_TYPES = ['Tag'];
983
- &nbsp;
984
- function isValidPrimitive(x: any): asserts x is string {
985
- const primitives = ['String', 'Long', 'Integer', 'Double', 'Boolean', 'Timestamp', 'Json'];
986
- &nbsp;
987
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!primitives.includes(x)) {
988
- <span class="cstat-no" title="statement not covered" > throw new Error(`must be one of ${primitives.join(', ')}, got: ${x}`);</span>
989
- }
990
- }
991
- &nbsp;
992
- interface JsonValue&lt;A&gt; {
993
- readonly path: string[];
994
- readonly pathValue: any;
995
- readonly hasValue: boolean;
996
- readonly value: A;
997
- readonly valueOrUndefined: A | undefined;
998
- get&lt;K extends keyof A&gt;(k: K): JsonValue&lt;A[K]&gt;;
999
- }
1000
- &nbsp;
1001
- class JsonValue&lt;A&gt; implements JsonValue&lt;A&gt; {
1002
- public static of&lt;B&gt;(x: B): JsonValue&lt;B&gt; {
1003
- return new JsonValue(x, []);
1004
- }
1005
- &nbsp;
1006
- public readonly hasValue: boolean = true;
1007
- public readonly valueOrUndefined: A | undefined = this.value;
1008
- public readonly pathValue: any = this.value;
1009
- &nbsp;
1010
- constructor(public readonly value: A, public readonly path: string[]) {
1011
- }
1012
- &nbsp;
1013
- public get&lt;K extends keyof A&gt;(k: K): JsonValue&lt;A[K]&gt; {
1014
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.value || typeof this.value !== 'object' || Array.isArray(this.value)) {
1015
- <span class="cstat-no" title="statement not covered" > return new ErrorValue(`expected object, found ${this.value}`, this.path, this.value);</span>
1016
- }
1017
- const ret = this.value[k];
1018
- if (ret === undefined) {
1019
- return new ErrorValue(`missing required key '${k}'`, this.path, this.value);
1020
- }
1021
- return new JsonValue(ret, [...this.path, `${k}`]);
1022
- }
1023
- }
1024
- &nbsp;
1025
- class ErrorValue&lt;A&gt; implements JsonValue&lt;A&gt; {
1026
- public readonly hasValue = false;
1027
- public readonly valueOrUndefined: A | undefined = undefined;
1028
- &nbsp;
1029
- constructor(private readonly error: string, public readonly path: string[], public readonly pathValue: any) {
1030
- }
1031
- &nbsp;
1032
- public <span class="fstat-no" title="function not covered" >get&lt;</span>K extends keyof A&gt;(_k: K): JsonValue&lt;A[K]&gt; {
1033
- <span class="cstat-no" title="statement not covered" > return this as any;</span>
1034
- }
1035
- &nbsp;
1036
- <span class="fstat-no" title="function not covered" > public get v</span>alue(): A {
1037
- <span class="cstat-no" title="statement not covered" > throw new Error(this.error);</span>
1038
- }
1039
- }
1040
- &nbsp;
1041
- export function <span class="fstat-no" title="function not covered" >formatErrorInContext(</span>error: ValidationError) {
1042
- let reportValue = <span class="cstat-no" title="statement not covered" >error.value.pathValue;</span>
1043
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >error.value.path.length;</span> i &gt; 0; i--) {</span>
1044
- <span class="cstat-no" title="statement not covered" > reportValue = { [error.value.path[i - 1]]: reportValue };</span>
1045
- }
1046
- &nbsp;
1047
- const formattedLines = <span class="cstat-no" title="statement not covered" >JSON.stringify(reportValue, undefined, 2).split('\n');</span>
1048
- &nbsp;
1049
- const indent = <span class="cstat-no" title="statement not covered" >2 * (error.value.path.length + 1);</span>
1050
- &nbsp;
1051
- // Insert the error message at line N with an appropriate indent
1052
- <span class="cstat-no" title="statement not covered" > formattedLines.splice(error.value.path.length + 1, 0, `\n!!!${' '.repeat(indent - 3)}${error.message} !!!\n`);</span>
1053
- &nbsp;
1054
- <span class="cstat-no" title="statement not covered" > return formattedLines.join('\n');</span>
1055
- }
1056
- &nbsp;
1057
- async function <span class="fstat-no" title="function not covered" >main(</span>args: string[]) {
1058
- const spec = <span class="cstat-no" title="statement not covered" >await fs.readJson(args[0]);</span>
1059
- const errors = <span class="cstat-no" title="statement not covered" >CfnSpecValidator.validate(spec);</span>
1060
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (errors.length !== 0) {</span>
1061
- <span class="cstat-no" title="statement not covered" > for (const error of errors) {</span>
1062
- <span class="cstat-no" title="statement not covered" > console.error(formatErrorInContext(error));</span>
1063
- }
1064
- <span class="cstat-no" title="statement not covered" > process.exitCode = 1;</span>
1065
- }
1066
- }
1067
- &nbsp;
1068
- <span class="missing-if-branch" title="if path not taken" >I</span>if (require.main === module) {
1069
- <span class="cstat-no" title="statement not covered" > main(process.argv.slice(2)).catch(<span class="fstat-no" title="function not covered" >e </span>=&gt; {</span>
1070
- <span class="cstat-no" title="statement not covered" > process.exitCode = 1;</span>
1071
- // eslint-disable-next-line no-console
1072
- <span class="cstat-no" title="statement not covered" > console.error(e.message);</span>
1073
- });
1074
- }</pre></td></tr></table></pre>
1075
-
1076
- <div class='push'></div><!-- for sticky footer -->
1077
- </div><!-- /wrapper -->
1078
- <div class='footer quiet pad2 space-top1 center small'>
1079
- Code coverage generated by
1080
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1081
- at Fri Jun 24 2022 21:27:03 GMT+0000 (Coordinated Universal Time)
1082
- </div>
1083
- <script src="../prettify.js"></script>
1084
- <script>
1085
- window.onload = function () {
1086
- prettyPrint();
1087
- };
1088
- </script>
1089
- <script src="../sorter.js"></script>
1090
- <script src="../block-navigation.js"></script>
1091
- </body>
1092
- </html>
1093
-