foreman_openscap 4.1.1 → 4.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (194) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/foreman_openscap/policy.css +5 -0
  3. data/app/controllers/api/v2/compliance/oval_contents_controller.rb +72 -0
  4. data/app/controllers/api/v2/compliance/oval_policies_controller.rb +111 -0
  5. data/app/controllers/api/v2/compliance/oval_reports_controller.rb +47 -0
  6. data/app/controllers/api/v2/compliance/scap_contents_controller.rb +2 -0
  7. data/app/controllers/concerns/foreman/controller/parameters/oval_content.rb +22 -0
  8. data/app/controllers/concerns/foreman/controller/parameters/oval_policy.rb +22 -0
  9. data/app/controllers/concerns/foreman_openscap/hosts_controller_extensions.rb +1 -1
  10. data/app/graphql/types/cve.rb +17 -0
  11. data/app/graphql/types/oval_content.rb +17 -0
  12. data/app/graphql/types/oval_policy.rb +21 -0
  13. data/app/helpers/arf_reports_helper.rb +7 -24
  14. data/app/helpers/policies_helper.rb +4 -17
  15. data/app/mailers/foreman_openscap/policy_mailer.rb +2 -2
  16. data/app/models/concerns/foreman_openscap/compliance_status_scoped_search.rb +1 -1
  17. data/app/models/concerns/foreman_openscap/data_stream_content.rb +0 -17
  18. data/app/models/concerns/foreman_openscap/host_extensions.rb +11 -11
  19. data/app/models/concerns/foreman_openscap/hostgroup_extensions.rb +3 -5
  20. data/app/models/concerns/foreman_openscap/inherited_policies.rb +11 -0
  21. data/app/models/concerns/foreman_openscap/oval_facet_host_extensions.rb +38 -0
  22. data/app/models/concerns/foreman_openscap/oval_facet_hostgroup_extensions.rb +15 -0
  23. data/app/models/concerns/foreman_openscap/policy_common.rb +75 -0
  24. data/app/models/concerns/foreman_openscap/scap_file_content.rb +24 -0
  25. data/app/models/foreman_openscap/arf_report.rb +2 -2
  26. data/app/models/foreman_openscap/cve.rb +23 -0
  27. data/app/models/foreman_openscap/host/oval_facet.rb +14 -0
  28. data/app/models/foreman_openscap/host_cve.rb +7 -0
  29. data/app/models/foreman_openscap/hostgroup/oval_facet.rb +14 -0
  30. data/app/models/foreman_openscap/hostgroup_oval_facet_oval_policy.rb +6 -0
  31. data/app/models/foreman_openscap/oval_content.rb +26 -0
  32. data/app/models/foreman_openscap/oval_facet_oval_policy.rb +6 -0
  33. data/app/models/foreman_openscap/oval_policy.rb +54 -0
  34. data/app/models/foreman_openscap/oval_status.rb +45 -0
  35. data/app/models/foreman_openscap/policy.rb +10 -73
  36. data/app/models/foreman_openscap/scap_content.rb +1 -0
  37. data/app/models/foreman_openscap/tailoring_file.rb +1 -0
  38. data/app/services/foreman_openscap/client_config/ansible.rb +39 -6
  39. data/app/services/foreman_openscap/client_config/base.rb +5 -1
  40. data/app/services/foreman_openscap/client_config/puppet.rb +2 -1
  41. data/app/services/foreman_openscap/config_name_service.rb +1 -1
  42. data/app/services/foreman_openscap/hostgroup_overrider.rb +2 -24
  43. data/app/services/foreman_openscap/hostgroup_overrider_common.rb +28 -0
  44. data/app/services/foreman_openscap/lookup_key_overrider.rb +30 -62
  45. data/app/services/foreman_openscap/lookup_key_overrides_common.rb +63 -0
  46. data/app/services/foreman_openscap/oval/check_collection.rb +45 -0
  47. data/app/services/foreman_openscap/oval/configure.rb +80 -0
  48. data/app/services/foreman_openscap/oval/cves.rb +41 -0
  49. data/app/services/foreman_openscap/oval/setup.rb +93 -0
  50. data/app/services/foreman_openscap/oval/setup_check.rb +55 -0
  51. data/app/services/foreman_openscap/oval/sync_oval_contents.rb +42 -0
  52. data/app/views/api/v2/compliance/oval_contents/base.json.rabl +6 -0
  53. data/app/views/api/v2/compliance/oval_contents/create.json.rabl +3 -0
  54. data/app/views/api/v2/compliance/oval_contents/index.json.rabl +3 -0
  55. data/app/views/api/v2/compliance/oval_contents/show.json.rabl +3 -0
  56. data/app/views/api/v2/compliance/oval_contents/sync.json.rabl +3 -0
  57. data/app/views/api/v2/compliance/oval_contents/sync_result.json.rabl +11 -0
  58. data/app/views/api/v2/compliance/oval_contents/update.json.rabl +3 -0
  59. data/app/views/api/v2/compliance/oval_policies/create.json.rabl +3 -0
  60. data/app/views/api/v2/compliance/oval_policies/index.json.rabl +3 -0
  61. data/app/views/api/v2/compliance/oval_policies/main.json.rabl +15 -0
  62. data/app/views/api/v2/compliance/oval_policies/show.json.rabl +3 -0
  63. data/app/views/api/v2/compliance/policies/base.json.rabl +2 -2
  64. data/app/views/api/v2/compliance/policies_common/_attrs.json.rabl +2 -0
  65. data/app/views/arf_reports/_output.html.erb +9 -1
  66. data/app/views/arf_reports/show.html.erb +1 -1
  67. data/app/views/arf_reports/show_html.html.erb +1 -0
  68. data/app/views/compliance_hosts/show.html.erb +1 -8
  69. data/app/views/job_templates/run_oval_scans.erb +24 -0
  70. data/app/views/policies/edit.html.erb +3 -2
  71. data/app/views/policies/show.html.erb +3 -1
  72. data/app/views/policies/steps/_deployment_options_form.html.erb +2 -2
  73. data/app/views/scap_contents/edit.html.erb +2 -12
  74. data/app/views/tailoring_files/edit.html.erb +2 -10
  75. data/config/initializers/inflections.rb +12 -0
  76. data/config/routes.rb +19 -0
  77. data/db/migrate/20201019074925_create_oval_policy.rb +13 -0
  78. data/db/migrate/20201020113801_create_oval_facet.rb +14 -0
  79. data/db/migrate/20201021084109_create_hostgroup_oval_facet.rb +14 -0
  80. data/db/migrate/20201106080924_create_oval_content.rb +12 -0
  81. data/db/migrate/20201116110256_add_oval_content_to_oval_policy.rb +5 -0
  82. data/db/migrate/20201120080329_create_cves.rb +13 -0
  83. data/db/migrate/20201202110213_update_puppet_port_param_type.rb +2 -6
  84. data/db/migrate/20201217130800_add_has_errata_to_cve.rb +8 -0
  85. data/db/migrate/20201217161511_add_url_to_oval_content.rb +5 -0
  86. data/db/migrate/20210409095625_add_oval_policy_reference_to_cve.rb +7 -0
  87. data/db/seeds.d/75-job_templates.rb +3 -2
  88. data/lib/foreman_openscap/bulk_upload.rb +2 -2
  89. data/lib/foreman_openscap/engine.rb +67 -9
  90. data/lib/foreman_openscap/version.rb +1 -1
  91. data/lib/tasks/foreman_openscap_tasks.rake +14 -9
  92. data/locale/de/LC_MESSAGES/foreman_openscap.mo +0 -0
  93. data/locale/de/foreman_openscap.edit.po +0 -0
  94. data/locale/de/foreman_openscap.po +215 -17
  95. data/locale/en_GB/LC_MESSAGES/foreman_openscap.mo +0 -0
  96. data/locale/en_GB/foreman_openscap.edit.po +0 -0
  97. data/locale/en_GB/foreman_openscap.po +213 -15
  98. data/locale/es/LC_MESSAGES/foreman_openscap.mo +0 -0
  99. data/locale/es/foreman_openscap.edit.po +0 -0
  100. data/locale/es/foreman_openscap.po +239 -41
  101. data/locale/foreman_openscap.pot +395 -112
  102. data/locale/fr/LC_MESSAGES/foreman_openscap.mo +0 -0
  103. data/locale/fr/foreman_openscap.edit.po +0 -0
  104. data/locale/fr/foreman_openscap.po +243 -45
  105. data/locale/gl/LC_MESSAGES/foreman_openscap.mo +0 -0
  106. data/locale/gl/foreman_openscap.edit.po +0 -0
  107. data/locale/gl/foreman_openscap.po +213 -15
  108. data/locale/it/LC_MESSAGES/foreman_openscap.mo +0 -0
  109. data/locale/it/foreman_openscap.edit.po +0 -0
  110. data/locale/it/foreman_openscap.po +213 -15
  111. data/locale/ja/LC_MESSAGES/foreman_openscap.mo +0 -0
  112. data/locale/ja/foreman_openscap.edit.po +0 -0
  113. data/locale/ja/foreman_openscap.po +262 -66
  114. data/locale/ko/LC_MESSAGES/foreman_openscap.mo +0 -0
  115. data/locale/ko/foreman_openscap.edit.po +0 -0
  116. data/locale/ko/foreman_openscap.po +214 -16
  117. data/locale/pt_BR/LC_MESSAGES/foreman_openscap.mo +0 -0
  118. data/locale/pt_BR/foreman_openscap.edit.po +0 -0
  119. data/locale/pt_BR/foreman_openscap.po +252 -54
  120. data/locale/ru/LC_MESSAGES/foreman_openscap.mo +0 -0
  121. data/locale/ru/foreman_openscap.edit.po +0 -0
  122. data/locale/ru/foreman_openscap.po +214 -16
  123. data/locale/sv_SE/LC_MESSAGES/foreman_openscap.mo +0 -0
  124. data/locale/sv_SE/foreman_openscap.edit.po +0 -0
  125. data/locale/sv_SE/foreman_openscap.po +213 -15
  126. data/locale/zh_CN/LC_MESSAGES/foreman_openscap.mo +0 -0
  127. data/locale/zh_CN/foreman_openscap.edit.po +0 -0
  128. data/locale/zh_CN/foreman_openscap.po +369 -169
  129. data/locale/zh_TW/LC_MESSAGES/foreman_openscap.mo +0 -0
  130. data/locale/zh_TW/foreman_openscap.edit.po +0 -0
  131. data/locale/zh_TW/foreman_openscap.po +214 -16
  132. data/package.json +48 -0
  133. data/test/factories/compliance_host_factory.rb +12 -0
  134. data/test/factories/oval_content_factory.rb +7 -0
  135. data/test/factories/oval_policy_factory.rb +9 -0
  136. data/test/files/oval_contents/ansible-2.9.oval.xml.bz2 +0 -0
  137. data/test/fixtures/cve_fixtures.rb +104 -0
  138. data/test/functional/api/v2/compliance/oval_contents_controller_test.rb +39 -0
  139. data/test/functional/api/v2/compliance/oval_policies_controller_test.rb +141 -0
  140. data/test/functional/api/v2/compliance/oval_reports_controller_test.rb +32 -0
  141. data/test/graphql/queries/oval_contents_query_test.rb +35 -0
  142. data/test/graphql/queries/oval_policies_query_test.rb +35 -0
  143. data/test/test_plugin_helper.rb +4 -0
  144. data/test/unit/oval_host_test.rb +45 -0
  145. data/test/unit/oval_policy_test.rb +133 -0
  146. data/test/unit/oval_status_test.rb +47 -0
  147. data/test/unit/services/oval/cves_test.rb +81 -0
  148. data/test/unit/services/oval/setup_test.rb +87 -0
  149. data/webpack/components/EmptyState.js +67 -0
  150. data/webpack/components/IndexLayout.js +35 -0
  151. data/webpack/components/IndexLayout.scss +3 -0
  152. data/webpack/components/IndexTable/IndexTableHelper.js +9 -0
  153. data/webpack/components/IndexTable/index.js +66 -0
  154. data/webpack/components/RuleSeverity/RuleSeverity.scss +3 -0
  155. data/webpack/components/RuleSeverity/RuleSeverity.test.js +13 -0
  156. data/webpack/components/RuleSeverity/__snapshots__/RuleSeverity.test.js.snap +41 -0
  157. data/webpack/components/RuleSeverity/i_severity-critical.svg +61 -0
  158. data/webpack/components/RuleSeverity/i_severity-high.svg +61 -0
  159. data/webpack/components/RuleSeverity/i_severity-low.svg +62 -0
  160. data/webpack/components/RuleSeverity/i_severity-med.svg +62 -0
  161. data/webpack/components/RuleSeverity/i_unknown.svg +33 -0
  162. data/webpack/components/RuleSeverity/index.js +33 -0
  163. data/webpack/components/withLoading.js +68 -0
  164. data/webpack/global_index.js +5 -0
  165. data/webpack/graphql/queries/cves.gql +18 -0
  166. data/webpack/graphql/queries/ovalContents.gql +11 -0
  167. data/webpack/graphql/queries/ovalPolicies.gql +12 -0
  168. data/webpack/graphql/queries/ovalPolicy.gql +21 -0
  169. data/webpack/helpers/commonHelper.js +1 -0
  170. data/webpack/helpers/globalIdHelper.js +13 -0
  171. data/webpack/helpers/pageParamsHelper.js +31 -0
  172. data/webpack/helpers/pathsHelper.js +22 -0
  173. data/webpack/helpers/tableHelper.js +9 -0
  174. data/webpack/index.js +8 -0
  175. data/webpack/routes/OvalContents/OvalContentsIndex/OvalContentsIndex.js +45 -0
  176. data/webpack/routes/OvalContents/OvalContentsIndex/OvalContentsTable.js +38 -0
  177. data/webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsIndex.fixtures.js +106 -0
  178. data/webpack/routes/OvalContents/OvalContentsIndex/__tests__/OvalContentsIndex.test.js +75 -0
  179. data/webpack/routes/OvalContents/OvalContentsIndex/index.js +7 -0
  180. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesIndex.js +46 -0
  181. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesTable.js +44 -0
  182. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesIndex.fixtures.js +61 -0
  183. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/__tests__/OvalPoliciesIndex.test.js +78 -0
  184. data/webpack/routes/OvalPolicies/OvalPoliciesIndex/index.js +7 -0
  185. data/webpack/routes/OvalPolicies/OvalPoliciesShow/CvesTab.js +48 -0
  186. data/webpack/routes/OvalPolicies/OvalPoliciesShow/CvesTable.js +63 -0
  187. data/webpack/routes/OvalPolicies/OvalPoliciesShow/OvalPoliciesShow.js +79 -0
  188. data/webpack/routes/OvalPolicies/OvalPoliciesShow/OvalPoliciesShowHelper.js +39 -0
  189. data/webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesShow.fixtures.js +78 -0
  190. data/webpack/routes/OvalPolicies/OvalPoliciesShow/__tests__/OvalPoliciesShow.test.js +112 -0
  191. data/webpack/routes/OvalPolicies/OvalPoliciesShow/index.js +35 -0
  192. data/webpack/routes/routes.js +28 -0
  193. data/webpack/testHelper.js +64 -0
  194. metadata +143 -3
@@ -0,0 +1,67 @@
1
+ import React from 'react';
2
+ import {
3
+ EmptyState as PfEmptyState,
4
+ EmptyStateBody,
5
+ EmptyStateIcon as PfEmptyStateIcon,
6
+ EmptyStateVariant,
7
+ Bullseye,
8
+ Title,
9
+ } from '@patternfly/react-core';
10
+ import PropTypes from 'prop-types';
11
+ import {
12
+ CubeIcon,
13
+ ExclamationCircleIcon,
14
+ SearchIcon,
15
+ } from '@patternfly/react-icons';
16
+ import { global_danger_color_200 as dangerColor } from '@patternfly/react-tokens';
17
+
18
+ const EmptyStateIcon = ({ error, search }) => {
19
+ if (error)
20
+ return (
21
+ <PfEmptyStateIcon
22
+ icon={ExclamationCircleIcon}
23
+ color={dangerColor.value}
24
+ />
25
+ );
26
+ if (search) return <PfEmptyStateIcon icon={SearchIcon} />;
27
+ return <PfEmptyStateIcon icon={CubeIcon} />;
28
+ };
29
+
30
+ const EmptyState = ({ title, body, error, search }) => (
31
+ <Bullseye>
32
+ <PfEmptyState variant={EmptyStateVariant.small}>
33
+ <EmptyStateIcon error={!!error} search={search} />
34
+ <Title headingLevel="h2" size="lg">
35
+ {title}
36
+ </Title>
37
+ <EmptyStateBody>{body}</EmptyStateBody>
38
+ </PfEmptyState>
39
+ </Bullseye>
40
+ );
41
+
42
+ EmptyStateIcon.propTypes = {
43
+ error: PropTypes.bool,
44
+ search: PropTypes.bool,
45
+ };
46
+
47
+ EmptyStateIcon.defaultProps = {
48
+ error: false,
49
+ search: false,
50
+ };
51
+
52
+ EmptyState.propTypes = {
53
+ title: PropTypes.string,
54
+ body: PropTypes.string,
55
+ error: PropTypes.oneOfType([PropTypes.shape({}), PropTypes.string]),
56
+ search: PropTypes.bool,
57
+ };
58
+
59
+ EmptyState.defaultProps = {
60
+ title: 'Unable to fetch data from server',
61
+ body:
62
+ 'There was an error retrieving data from the server. Check your connection and try again.',
63
+ error: undefined,
64
+ search: false,
65
+ };
66
+
67
+ export default EmptyState;
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Helmet } from 'react-helmet';
4
+ import {
5
+ Grid,
6
+ GridItem,
7
+ TextContent,
8
+ Text,
9
+ TextVariants,
10
+ } from '@patternfly/react-core';
11
+
12
+ import './IndexLayout.scss';
13
+
14
+ const IndexLayout = ({ pageTitle, children }) => (
15
+ <React.Fragment>
16
+ <Helmet>
17
+ <title>{pageTitle}</title>
18
+ </Helmet>
19
+ <Grid className="scap-page-grid">
20
+ <GridItem span={12}>
21
+ <TextContent>
22
+ <Text component={TextVariants.h1}>{pageTitle}</Text>
23
+ </TextContent>
24
+ </GridItem>
25
+ <GridItem span={12}>{children}</GridItem>
26
+ </Grid>
27
+ </React.Fragment>
28
+ );
29
+
30
+ IndexLayout.propTypes = {
31
+ pageTitle: PropTypes.string.isRequired,
32
+ children: PropTypes.object.isRequired,
33
+ };
34
+
35
+ export default IndexLayout;
@@ -0,0 +1,3 @@
1
+ .scap-page-grid {
2
+ margin: 1.8rem 1rem;
3
+ }
@@ -0,0 +1,9 @@
1
+ import { addSearch } from '../../helpers/pageParamsHelper';
2
+
3
+ export const preparePerPageOptions = opts =>
4
+ opts.map(item => ({ title: item.toString(), value: item }));
5
+
6
+ export const refreshPage = (history, params = {}) => {
7
+ const url = addSearch(history.location.pathname, params);
8
+ history.push(url);
9
+ };
@@ -0,0 +1,66 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Table, TableHeader, TableBody } from '@patternfly/react-table';
4
+ import { Pagination, Flex, FlexItem } from '@patternfly/react-core';
5
+ import '@patternfly/patternfly/patternfly-addons.scss';
6
+ import { usePaginationOptions } from 'foremanReact/components/Pagination/PaginationHooks';
7
+
8
+ import { preparePerPageOptions, refreshPage } from './IndexTableHelper';
9
+
10
+ const IndexTable = props => {
11
+ const handlePerPageSelected = (event, perPage) => {
12
+ refreshPage(props.history, { page: 1, perPage });
13
+ };
14
+
15
+ const handlePageSelected = (event, page) => {
16
+ refreshPage(props.history, { ...props.pagination, page });
17
+ };
18
+
19
+ const perPageOptions = preparePerPageOptions(usePaginationOptions());
20
+
21
+ return (
22
+ <React.Fragment>
23
+ <Flex className="pf-u-pt-md">
24
+ <FlexItem>{props.toolbarBtns}</FlexItem>
25
+ <FlexItem align={{ default: 'alignRight' }}>
26
+ <Pagination
27
+ itemCount={props.totalCount}
28
+ page={props.pagination.page}
29
+ perPage={props.pagination.perPage}
30
+ onSetPage={handlePageSelected}
31
+ onPerPageSelect={handlePerPageSelected}
32
+ perPageOptions={perPageOptions}
33
+ variant="top"
34
+ />
35
+ </FlexItem>
36
+ </Flex>
37
+ <Table
38
+ aria-label={props.ariaTableLabel}
39
+ cells={props.columns}
40
+ rows={props.rows}
41
+ actions={props.actions}
42
+ >
43
+ <TableHeader />
44
+ <TableBody />
45
+ </Table>
46
+ </React.Fragment>
47
+ );
48
+ };
49
+
50
+ IndexTable.propTypes = {
51
+ history: PropTypes.object.isRequired,
52
+ pagination: PropTypes.object.isRequired,
53
+ toolbarBtns: PropTypes.array,
54
+ totalCount: PropTypes.number.isRequired,
55
+ ariaTableLabel: PropTypes.string.isRequired,
56
+ columns: PropTypes.array.isRequired,
57
+ rows: PropTypes.array.isRequired,
58
+ actions: PropTypes.array,
59
+ };
60
+
61
+ IndexTable.defaultProps = {
62
+ toolbarBtns: [],
63
+ actions: [],
64
+ };
65
+
66
+ export default IndexTable;
@@ -0,0 +1,3 @@
1
+ img.severity-img {
2
+ max-height: 56px;
3
+ }
@@ -0,0 +1,13 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+
3
+ import RuleSeverity from './index';
4
+
5
+ const levels = ['Low', 'Medium', 'High', 'Critical', 'foo'];
6
+
7
+ const fixtures = levels.reduce((memo, level) => {
8
+ memo[`should render for ${level} severity`] = { severity: level };
9
+ return memo;
10
+ }, {});
11
+
12
+ describe('RuleSeverity', () =>
13
+ testComponentSnapshotsWithFixtures(RuleSeverity, fixtures));
@@ -0,0 +1,41 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`RuleSeverity should render for Critical severity 1`] = `
4
+ <img
5
+ alt="Unknown Serverity"
6
+ className="severity-img"
7
+ src={[Function]}
8
+ />
9
+ `;
10
+
11
+ exports[`RuleSeverity should render for High severity 1`] = `
12
+ <img
13
+ alt="Unknown Serverity"
14
+ className="severity-img"
15
+ src={[Function]}
16
+ />
17
+ `;
18
+
19
+ exports[`RuleSeverity should render for Low severity 1`] = `
20
+ <img
21
+ alt="Unknown Serverity"
22
+ className="severity-img"
23
+ src={[Function]}
24
+ />
25
+ `;
26
+
27
+ exports[`RuleSeverity should render for Medium severity 1`] = `
28
+ <img
29
+ alt="Unknown Serverity"
30
+ className="severity-img"
31
+ src={[Function]}
32
+ />
33
+ `;
34
+
35
+ exports[`RuleSeverity should render for foo severity 1`] = `
36
+ <img
37
+ alt="Unknown Serverity"
38
+ className="severity-img"
39
+ src={[Function]}
40
+ />
41
+ `;
@@ -0,0 +1,61 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_critical.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata4612"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs4610" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="1920"
34
+ inkscape:window-height="1055"
35
+ id="namedview4608"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="1"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style4593">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#CC0000;}
48
+ </style><g
49
+ id="g4605"><path
50
+ class="st1"
51
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
52
+ id="path4597" /><path
53
+ class="st1"
54
+ d="M114.6,110.2H31c-7.2,0-13-4.8-13-10.6l0,0C18,93.7,23.9,89,31,89h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,105.4,121.8,110.2,114.6,110.2z"
55
+ id="path4599" /><path
56
+ class="st1"
57
+ d="M115,77.1H31.4c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6H115c7.2,0,13,4.8,13,10.6l0,0 C128,72.3,122.1,77.1,115,77.1z"
58
+ id="path4601" /><path
59
+ class="st1"
60
+ d="M114.6,44H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.7,13-10.7h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,39.2,121.8,44,114.6,44z"
61
+ id="path4603" /></g></svg>
@@ -0,0 +1,61 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_high.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata6016"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs6014" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="1920"
34
+ inkscape:window-height="1055"
35
+ id="namedview6012"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="1"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style5999">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#F39800;}
48
+ .st2{fill:#CCCCCC;}
49
+ </style><path
50
+ class="st1"
51
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
52
+ id="path6003" /><path
53
+ class="st1"
54
+ d="M114.6,110.2H31c-7.2,0-13-4.8-13-10.6l0,0C18,93.7,23.9,89,31,89h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,105.4,121.8,110.2,114.6,110.2z"
55
+ id="path6005" /><path
56
+ class="st1"
57
+ d="M115,77.1H31.4c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6H115c7.2,0,13,4.8,13,10.6l0,0 C128,72.3,122.1,77.1,115,77.1z"
58
+ id="path6007" /><path
59
+ class="st2"
60
+ d="M99.6,40.2H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,37.1,104.3,40.2,99.6,40.2z"
61
+ id="path6009" /></svg>
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_low.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata6693"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs6691" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="1920"
34
+ inkscape:window-height="1055"
35
+ id="namedview6689"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="1"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style6674">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#94D400;}
48
+ .st2{fill:#CCCCCC;}
49
+ </style><g
50
+ id="g6678" /><path
51
+ class="st1"
52
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
53
+ id="path6680" /><path
54
+ class="st2"
55
+ d="M99.6,40.2H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,37.1,104.3,40.2,99.6,40.2z"
56
+ id="path6682" /><path
57
+ class="st2"
58
+ d="M99.6,73.3H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,70.2,104.3,73.3,99.6,73.3z"
59
+ id="path6684" /><path
60
+ class="st2"
61
+ d="M99.6,106.4H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,103.3,104.3,106.4,99.6,106.4z"
62
+ id="path6686" /></svg>
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_med.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata7574"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs7572" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="834"
34
+ inkscape:window-height="480"
35
+ id="namedview7570"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="0"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style7555">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#DEC800;}
48
+ .st2{fill:#CCCCCC;}
49
+ </style><g
50
+ id="g7559" /><path
51
+ class="st1"
52
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
53
+ id="path7561" /><path
54
+ class="st1"
55
+ d="M114.6,110.2H31c-7.2,0-13-4.8-13-10.6l0,0C18,93.7,23.9,89,31,89h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,105.4,121.8,110.2,114.6,110.2z"
56
+ id="path7563" /><path
57
+ class="st2"
58
+ d="M99.6,40.2H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,37.1,104.3,40.2,99.6,40.2z"
59
+ id="path7565" /><path
60
+ class="st2"
61
+ d="M99.6,73.3H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,70.2,104.3,73.3,99.6,73.3z"
62
+ id="path7567" /></svg>