bolognese 0.9.21 → 0.9.22

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +11 -9
  3. data/lib/bolognese/datacite_utils.rb +1 -1
  4. data/lib/bolognese/metadata.rb +1 -1
  5. data/lib/bolognese/readers/citeproc_reader.rb +1 -1
  6. data/lib/bolognese/readers/codemeta_reader.rb +1 -1
  7. data/lib/bolognese/readers/datacite_json_reader.rb +1 -1
  8. data/lib/bolognese/readers/datacite_reader.rb +8 -6
  9. data/lib/bolognese/readers/schema_org_reader.rb +1 -1
  10. data/lib/bolognese/utils.rb +1 -1
  11. data/lib/bolognese/version.rb +1 -1
  12. data/lib/bolognese/writers/bibtex_writer.rb +1 -1
  13. data/lib/bolognese/writers/ris_writer.rb +2 -2
  14. data/lib/bolognese/writers/schema_org_writer.rb +2 -2
  15. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/Funding.yml +99 -0
  16. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/parse_attributes/array_of_strings.yml +144 -0
  17. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/container_title.yml +40 -0
  18. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/alternate_name.yml +40 -0
  19. data/spec/readers/codemeta_reader_spec.rb +3 -3
  20. data/spec/readers/datacite_reader_spec.rb +21 -1
  21. data/spec/readers/schema_org_reader_spec.rb +2 -2
  22. data/spec/utils_spec.rb +6 -0
  23. data/spec/writers/citeproc_writer_spec.rb +14 -0
  24. data/spec/writers/rdf_xml_writer_spec.rb +45 -44
  25. data/spec/writers/ris_writer_spec.rb +20 -1
  26. metadata +6 -8
  27. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/BlogPosting.yml +0 -4685
  28. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/BlogPosting_Citeproc_JSON.yml +0 -4589
  29. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/Crossref_DOI.yml +0 -4589
  30. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/journal_article.yml +0 -5317
  31. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/maremma.yml +0 -4686
  32. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/with_pages.yml +0 -4963
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d4e20d0be37dc7ce7dbc5e59d058fb053d999735
4
- data.tar.gz: 78acdb951bbbbd0be57b2c3dcce7028869930f24
3
+ metadata.gz: 5ba49af039894a0a58bbe004892ff7d88c4f5f23
4
+ data.tar.gz: dcab422988aad91c0dcaf0deb246c8371dd34f2c
5
5
  SHA512:
6
- metadata.gz: 8320cb29b7405378cf834296bf8d5f880faa68ec0133db61cb380a91965625bb5102a25f80cafd16cdfaa4338bba079b14ea76d464d77f161bbcf17e4003d20d
7
- data.tar.gz: a119e2c6c2e573fac81f62c96b40a4c7f30d5dcec10ba67dbd67abcd0fb22071a31c914d7efd0f62fd6f04ccc82c39a0c598f0ba15b2c50154e48aa9e6613e3c
6
+ metadata.gz: 539cd575670c222bfbc08c3964e3d9c323f5f52349db3ce57c1f628325d93357831e785a392018a4ec69cd25a6a08353de5d0c51506d34eddae2398519791d04
7
+ data.tar.gz: cdf2422dc843a1f7f26a55892b84f430de318af9a9d92fbb7a8f3dcc8209c3444495fd4842d43f7dfabb8f7d283cae023645066f98985c7bced9e33b41f75922
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bolognese (0.9.21)
4
+ bolognese (0.9.22)
5
5
  activesupport (>= 4.2.5, < 6)
6
6
  benchmark_methods (~> 0.7)
7
7
  bibtex-ruby (~> 4.1)
@@ -22,7 +22,7 @@ PATH
22
22
  GEM
23
23
  remote: https://rubygems.org/
24
24
  specs:
25
- activesupport (5.1.0)
25
+ activesupport (5.1.1)
26
26
  concurrent-ruby (~> 1.0, >= 1.0.2)
27
27
  i18n (~> 0.7)
28
28
  minitest (~> 5.1)
@@ -53,15 +53,16 @@ GEM
53
53
  faraday (>= 0.7.4, < 1.0)
54
54
  gender_detector (0.1.2)
55
55
  unicode_utils (>= 1.3.0)
56
- haml (4.0.7)
56
+ haml (5.0.1)
57
+ temple (>= 0.8.0)
57
58
  tilt
58
59
  hamster (3.0.0)
59
60
  concurrent-ruby (~> 1.0)
60
61
  hashdiff (0.3.4)
61
62
  htmlentities (4.3.4)
62
- i18n (0.8.1)
63
+ i18n (0.8.4)
63
64
  json (2.1.0)
64
- json-ld (2.1.3)
65
+ json-ld (2.1.4)
65
66
  multi_json (~> 1.12)
66
67
  rdf (~> 2.2)
67
68
  jsonlint (0.2.0)
@@ -96,7 +97,7 @@ GEM
96
97
  nokogiri (>= 1.6.1, < 1.8)
97
98
  public_suffix (>= 2.0.0, < 2.1)
98
99
  public_suffix (2.0.5)
99
- rack (2.0.2)
100
+ rack (2.0.3)
100
101
  rack-test (0.6.3)
101
102
  rack (>= 1.0)
102
103
  rake (12.0.0)
@@ -105,8 +106,8 @@ GEM
105
106
  link_header (~> 0.0, >= 0.0.8)
106
107
  rdf-aggregate-repo (2.2.0)
107
108
  rdf (~> 2.0)
108
- rdf-rdfa (2.2.1)
109
- haml (~> 4.0)
109
+ rdf-rdfa (2.2.2)
110
+ haml (~> 5.0)
110
111
  htmlentities (~> 4.3)
111
112
  rdf (~> 2.2)
112
113
  rdf-aggregate-repo (~> 2.2)
@@ -142,9 +143,10 @@ GEM
142
143
  docile (~> 1.1.0)
143
144
  json (>= 1.8, < 3)
144
145
  simplecov-html (~> 0.10.0)
145
- simplecov-html (0.10.0)
146
+ simplecov-html (0.10.1)
146
147
  sxp (1.0.0)
147
148
  rdf (~> 2.0)
149
+ temple (0.8.0)
148
150
  thor (0.19.4)
149
151
  thread_safe (0.3.6)
150
152
  tilt (2.0.7)
@@ -150,7 +150,7 @@ module Bolognese
150
150
  return xml unless keywords.present?
151
151
 
152
152
  xml.subjects do
153
- keywords.split(", ").each do |subject|
153
+ keywords.each do |subject|
154
154
  xml.subject(subject)
155
155
  end
156
156
  end
@@ -323,7 +323,7 @@ module Bolognese
323
323
  end
324
324
 
325
325
  def container_title
326
- is_part_of.to_h.fetch("title", nil)
326
+ Array.wrap(is_part_of).length == 1 ? is_part_of.to_h.fetch("title", nil) : nil
327
327
  end
328
328
 
329
329
  def descriptions
@@ -64,7 +64,7 @@ module Bolognese
64
64
  "description" => meta.fetch("abstract", nil).present? ? { "text" => sanitize(meta.fetch("abstract")) } : nil,
65
65
  #{ }"license" => { "id" => meta.field?(:copyright) && meta.copyright.to_s.presence },
66
66
  "version" => meta.fetch("version", nil),
67
- "keywords" => meta.fetch("categories", nil)
67
+ "keywords" => Array.wrap(meta.fetch("categories", nil)).split(", ")
68
68
  }
69
69
  end
70
70
  end
@@ -43,7 +43,7 @@ module Bolognese
43
43
  "description" => meta.fetch("description", nil).present? ? { "text" => sanitize(meta.fetch("description")) } : nil,
44
44
  "license" => { "id" => meta.fetch("license", nil) },
45
45
  "version" => meta.fetch("version", nil),
46
- "keywords" => Array.wrap(meta.fetch("tags", nil)).join(", ").presence
46
+ "keywords" => meta.fetch("tags", nil)
47
47
  }
48
48
  end
49
49
 
@@ -41,7 +41,7 @@ module Bolognese
41
41
  "description" => meta.fetch("description", nil),
42
42
  "license" => meta.fetch("license", nil),
43
43
  "version" => meta.fetch("version", nil),
44
- "keywords" => Array.wrap(meta.fetch("subject", nil)).join(", ").presence,
44
+ "keywords" => meta.fetch("subject", nil),
45
45
  "language" => meta.fetch("language", nil),
46
46
  "content_size" => meta.fetch("size", nil),
47
47
  "schema_version" => meta.fetch("schema-version", nil)
@@ -42,12 +42,14 @@ module Bolognese
42
42
  { "id" => normalize_url(r["rightsURI"]), "name" => r["__content__"] }.compact
43
43
  end.unwrap
44
44
  keywords = Array.wrap(meta.dig("subjects", "subject")).map do |k|
45
- if k.is_a?(String)
45
+ if k.nil?
46
+ nil
47
+ elsif k.is_a?(String)
46
48
  sanitize(k)
47
49
  else
48
- k.to_h.fetch("__content__", nil)
50
+ { "subject_scheme" => k["subjectScheme"], "scheme_uri" => k["schemeURI"], "text" => sanitize(k["__content__"]) }.compact
49
51
  end
50
- end.compact.join(", ").presence
52
+ end.compact
51
53
  dates = Array.wrap(meta.dig("dates", "date"))
52
54
  funding = begin
53
55
  f = datacite_funder_contributor(meta) + datacite_funding_reference(meta)
@@ -111,9 +113,9 @@ module Bolognese
111
113
  if f["awardNumber"].present? || f["awardTitle"].present?
112
114
  { "type" => "Award",
113
115
  "name" => f.fetch("awardTitle", nil),
114
- "identifier" => f.dig("awardNumber", "__content__"),
115
- "url" => f.dig("awardNumber", "awardURI"),
116
- "funder" => funder }
116
+ "identifier" => f["awardNumber"].is_a?(Hash) ? f.dig("awardNumber", "__content__") : f["awardNumber"],
117
+ "url" => f["awardNumber"].is_a?(Hash) ? f.dig("awardNumber", "awardURI") : nil,
118
+ "funder" => funder }.compact
117
119
  else
118
120
  funder
119
121
  end
@@ -55,7 +55,7 @@ module Bolognese
55
55
  "description" => meta.fetch("description", nil).present? ? { "text" => sanitize(meta.fetch("description")) } : nil,
56
56
  "license" => { "id" => meta.fetch("license", nil) },
57
57
  "version" => meta.fetch("version", nil),
58
- "keywords" => meta.fetch("keywords", nil)
58
+ "keywords" => meta.fetch("keywords", nil).to_s.split(", ")
59
59
  }
60
60
  end
61
61
 
@@ -293,7 +293,7 @@ module Bolognese
293
293
  elsif element.is_a?(Hash)
294
294
  element.fetch(content, nil)
295
295
  elsif element.is_a?(Array)
296
- a = element.map { |e| e.fetch(content, nil) }.uniq
296
+ a = element.map { |e| e.is_a?(Hash) ? e.fetch(content, nil) : e }.uniq
297
297
  a = options[:first] ? a.first : a.unwrap
298
298
  else
299
299
  nil
@@ -1,3 +1,3 @@
1
1
  module Bolognese
2
- VERSION = "0.9.21"
2
+ VERSION = "0.9.22"
3
3
  end
@@ -10,7 +10,7 @@ module Bolognese
10
10
  doi: doi,
11
11
  url: url,
12
12
  author: authors_as_string(author),
13
- keywords: keywords,
13
+ keywords: Array.wrap(parse_attributes(keywords, content: "text")).join(", "),
14
14
  language: language,
15
15
  title: parse_attributes(title, content: "text", first: true),
16
16
  journal: container_title,
@@ -12,10 +12,10 @@ module Bolognese
12
12
  "DO" => doi,
13
13
  "UR" => url,
14
14
  "AB" => parse_attributes(description, content: "text", first: true),
15
- "KW" => keywords.to_s.split(", ").presence,
15
+ "KW" => parse_attributes(keywords, content: "text").presence,
16
16
  "PY" => publication_year,
17
17
  "PB" => publisher,
18
- "AN" => alternate_name.present? ? alternate_name["name"] : nil,
18
+ "AN" => parse_attributes(alternate_name, content: "name").presence,
19
19
  "LA" => language,
20
20
  "VL" => volume,
21
21
  "IS" => issue,
@@ -10,13 +10,13 @@ module Bolognese
10
10
  "url" => url,
11
11
  "additionalType" => additional_type,
12
12
  "name" => parse_attributes(title, content: "text", first: true),
13
- "alternateName" => alternate_name,
13
+ "alternateName" => parse_attributes(alternate_name, content: "name", first: true),
14
14
  "author" => to_schema_org(author),
15
15
  "editor" => to_schema_org(editor),
16
16
  "description" => parse_attributes(description, content: "text", first: true),
17
17
  "license" => Array.wrap(license).map { |l| l["id"] }.compact.unwrap,
18
18
  "version" => version,
19
- "keywords" => keywords,
19
+ "keywords" => Array.wrap(keywords).join(", ").presence,
20
20
  "inLanguage" => language,
21
21
  "contentSize" => content_size,
22
22
  "dateCreated" => date_created,
@@ -0,0 +1,99 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.datacite.org/prefixes/10.15125
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Maremma - https://github.com/datacite/maremma
12
+ Accept:
13
+ - text/html,application/json,application/xml;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: ''
18
+ headers:
19
+ Access-Control-Allow-Headers:
20
+ - Content-Type,Accept,Accept-Encoding,Origin,User-Agent,Cache-Control,Keep-Alive
21
+ Access-Control-Allow-Methods:
22
+ - GET, POST, OPTIONS
23
+ Access-Control-Allow-Origin:
24
+ - "*"
25
+ Access-Control-Max-Age:
26
+ - '1728000'
27
+ Cache-Control:
28
+ - max-age=0, private, must-revalidate
29
+ Content-Type:
30
+ - application/vnd.api+json; charset=utf-8
31
+ Date:
32
+ - Mon, 05 Jun 2017 13:36:39 GMT
33
+ Etag:
34
+ - W/"51c8b6832184f5635e2c8c2da0224b7e"
35
+ Server:
36
+ - openresty/1.11.2.2
37
+ Status:
38
+ - 200 OK
39
+ Vary:
40
+ - Accept-Encoding
41
+ X-Content-Type-Options:
42
+ - nosniff
43
+ X-Frame-Options:
44
+ - SAMEORIGIN
45
+ X-Powered-By:
46
+ - Phusion Passenger 5.1.4
47
+ X-Request-Id:
48
+ - 403df8af-9b51-4522-84ae-28da4046bad6
49
+ X-Runtime:
50
+ - '0.313661'
51
+ X-Xss-Protection:
52
+ - 1; mode=block
53
+ Content-Length:
54
+ - '125'
55
+ Connection:
56
+ - keep-alive
57
+ body:
58
+ encoding: UTF-8
59
+ string: '{"data":{"id":"10.15125","type":"prefixes","attributes":{"registration-agency":"DataCite","updated":"2016-09-21T20:24:28Z"}}}'
60
+ http_version:
61
+ recorded_at: Mon, 05 Jun 2017 13:36:39 GMT
62
+ - request:
63
+ method: get
64
+ uri: https://search.datacite.org/api?fl=doi,xml,media,minted,updated&q=doi:10.15125/bath-00114&wt=json
65
+ body:
66
+ encoding: US-ASCII
67
+ string: ''
68
+ headers:
69
+ User-Agent:
70
+ - Maremma - https://github.com/datacite/maremma
71
+ Accept:
72
+ - text/html,application/json,application/xml;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5
73
+ response:
74
+ status:
75
+ code: 200
76
+ message: ''
77
+ headers:
78
+ Access-Control-Allow-Methods:
79
+ - GET, POST, OPTIONS
80
+ Access-Control-Allow-Origin:
81
+ - "*"
82
+ Content-Type:
83
+ - application/json;charset=UTF-8
84
+ Date:
85
+ - Mon, 05 Jun 2017 13:36:39 GMT
86
+ Server:
87
+ - openresty/1.11.2.2
88
+ Content-Length:
89
+ - '14115'
90
+ Connection:
91
+ - keep-alive
92
+ body:
93
+ encoding: UTF-8
94
+ string: '{"responseHeader":{"status":0,"QTime":0},"response":{"numFound":1,"start":0,"docs":[{"xml":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHJlc291cmNlIHhtbG5zPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtNCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtNCBodHRwOi8vc2NoZW1hLmRhdGFjaXRlLm9yZy9tZXRhL2tlcm5lbC00L21ldGFkYXRhLnhzZCI+PGlkZW50aWZpZXIgaWRlbnRpZmllclR5cGU9IkRPSSI+MTAuMTUxMjUvQkFUSC0wMDExNDwvaWRlbnRpZmllcj48Y3JlYXRvcnM+PGNyZWF0b3I+PGNyZWF0b3JOYW1lPkJpbWJvLCBOdW5vPC9jcmVhdG9yTmFtZT48Z2l2ZW5OYW1lPk51bm88L2dpdmVuTmFtZT48ZmFtaWx5TmFtZT5CaW1ibzwvZmFtaWx5TmFtZT48bmFtZUlkZW50aWZpZXIgbmFtZUlkZW50aWZpZXJTY2hlbWU9Ik9SQ0lEIiBzY2hlbWVVUkk9Imh0dHA6Ly9vcmNpZC5vcmcvIj4wMDAwLTAwMDEtODc0MC04Mjg0PC9uYW1lSWRlbnRpZmllcj48L2NyZWF0b3I+PGNyZWF0b3I+PGNyZWF0b3JOYW1lPlRpbmcsIFZhbGVza2E8L2NyZWF0b3JOYW1lPjxnaXZlbk5hbWU+VmFsZXNrYTwvZ2l2ZW5OYW1lPjxmYW1pbHlOYW1lPlRpbmc8L2ZhbWlseU5hbWU+PGFmZmlsaWF0aW9uPlVuaXZlcnNpdHkgb2YgQmF0aDwvYWZmaWxpYXRpb24+PC9jcmVhdG9yPjwvY3JlYXRvcnM+PHRpdGxlcz48dGl0bGU+RGF0YXNldCBmb3IgIkRpcmVjdCBFdmlkZW5jZSBmb3IgU29saWQtTGlrZSBIeWRyb2dlbiBpbiBhIE5hbm9wb3JvdXMgQ2FyYm9uIEh5ZHJvZ2VuIFN0b3JhZ2UgTWF0ZXJpYWwgYXQgU3VwZXJjcml0aWNhbCBUZW1wZXJhdHVyZXMiPC90aXRsZT48L3RpdGxlcz48cHVibGlzaGVyPlVuaXZlcnNpdHkgb2YgQmF0aDwvcHVibGlzaGVyPjxwdWJsaWNhdGlvblllYXI+MjAxNTwvcHVibGljYXRpb25ZZWFyPjxzdWJqZWN0cz48c3ViamVjdCBzdWJqZWN0U2NoZW1lPSJSQ1VLIFJlc2VhcmNoIENsYXNzaWZpY2F0aW9ucyIgc2NoZW1lVVJJPSJodHRwOi8vd3d3LnJjdWsuYWMudWsvcmVzZWFyY2gvZWZmaWNpZW5jeS9yZXNlYXJjaGFkbWluL2hhcm1vbmlzYXRpb24vIj5FbmVyZ3kgU3RvcmFnZTwvc3ViamVjdD48c3ViamVjdCBzdWJqZWN0U2NoZW1lPSJSQ1VLIFJlc2VhcmNoIENsYXNzaWZpY2F0aW9ucyIgc2NoZW1lVVJJPSJodHRwOi8vd3d3LnJjdWsuYWMudWsvcmVzZWFyY2gvZWZmaWNpZW5jeS9yZXNlYXJjaGFkbWluL2hhcm1vbmlzYXRpb24vIj5NYXRlcmlhbHMgQ2hhcmFjdGVyaXNhdGlvbjwvc3ViamVjdD48L3N1YmplY3RzPjxyZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlR2VuZXJhbD0iRGF0YXNldCI+RGF0YXNldDwvcmVzb3VyY2VUeXBlPjxmdW5kaW5nUmVmZXJlbmNlcz48ZnVuZGluZ1JlZmVyZW5jZT48ZnVuZGVyTmFtZT5FbmdpbmVlcmluZyBhbmQgUGh5c2ljYWwgU2NpZW5jZXMgUmVzZWFyY2ggQ291bmNpbCAoRVBTUkMpPC9mdW5kZXJOYW1lPjxmdW5kZXJJZGVudGlmaWVyIGZ1bmRlcklkZW50aWZpZXJUeXBlPSJDcm9zc3JlZiBGdW5kZXIgSUQiPmh0dHBzOi8vZG9pLm9yZy8xMC4xMzAzOS81MDExMDAwMDAyNjY8L2Z1bmRlcklkZW50aWZpZXI+PGF3YXJkTnVtYmVyPkVQL0owMTY0NTQvMTwvYXdhcmROdW1iZXI+PGF3YXJkVGl0bGU+U1VQRVJHRU4gSHViIEZ1bmRpbmc8L2F3YXJkVGl0bGU+PC9mdW5kaW5nUmVmZXJlbmNlPjxmdW5kaW5nUmVmZXJlbmNlPjxmdW5kZXJOYW1lPkVuZ2luZWVyaW5nIGFuZCBQaHlzaWNhbCBTY2llbmNlcyBSZXNlYXJjaCBDb3VuY2lsIChFUFNSQyk8L2Z1bmRlck5hbWU+PGZ1bmRlcklkZW50aWZpZXIgZnVuZGVySWRlbnRpZmllclR5cGU9IkNyb3NzcmVmIEZ1bmRlciBJRCI+aHR0cHM6Ly9kb2kub3JnLzEwLjEzMDM5LzUwMTEwMDAwMDI2NjwvZnVuZGVySWRlbnRpZmllcj48YXdhcmROdW1iZXI+RVAvSzAyMTEwOS8xPC9hd2FyZE51bWJlcj48YXdhcmRUaXRsZT5JbnRlZ3JhdGVkIHNhZmV0eSBzdHJhdGVnaWVzIGZvciBvbmJvYXJkIGh5ZHJvZ2VuIHN0b3JhZ2Ugc3lzdGVtczwvYXdhcmRUaXRsZT48L2Z1bmRpbmdSZWZlcmVuY2U+PGZ1bmRpbmdSZWZlcmVuY2U+PGZ1bmRlck5hbWU+RW5naW5lZXJpbmcgYW5kIFBoeXNpY2FsIFNjaWVuY2VzIFJlc2VhcmNoIENvdW5jaWwgKEVQU1JDKTwvZnVuZGVyTmFtZT48ZnVuZGVySWRlbnRpZmllciBmdW5kZXJJZGVudGlmaWVyVHlwZT0iQ3Jvc3NyZWYgRnVuZGVyIElEIj5odHRwczovL2RvaS5vcmcvMTAuMTMwMzkvNTAxMTAwMDAwMjY2PC9mdW5kZXJJZGVudGlmaWVyPjxhd2FyZE51bWJlcj5FUC9FMDQwMDcxLzE8L2F3YXJkTnVtYmVyPjxhd2FyZFRpdGxlPlVLIFNVU1RBSU5BQkxFIEhZRFJPR0VOIEVORVJHWSBDT05TT1JUSVVNIENPUkUgUFJPR1JBTU1FPC9hd2FyZFRpdGxlPjwvZnVuZGluZ1JlZmVyZW5jZT48ZnVuZGluZ1JlZmVyZW5jZT48ZnVuZGVyTmFtZT5TY2llbmNlIGFuZCBUZWNobm9sb2d5IEZhY2lsaXRpZXMgQ291bmNpbCAoU1RGQyk8L2Z1bmRlck5hbWU+PGZ1bmRlcklkZW50aWZpZXIgZnVuZGVySWRlbnRpZmllclR5cGU9IkNyb3NzcmVmIEZ1bmRlciBJRCI+aHR0cHM6Ly9kb2kub3JnLzEwLjEzMDM5LzUwMTEwMDAwMDI3MTwvZnVuZGVySWRlbnRpZmllcj48YXdhcmROdW1iZXI+UkIxMjEwMDQxPC9hd2FyZE51bWJlcj48L2Z1bmRpbmdSZWZlcmVuY2U+PGZ1bmRpbmdSZWZlcmVuY2U+PGZ1bmRlck5hbWU+U2NpZW5jZSBhbmQgVGVjaG5vbG9neSBGYWNpbGl0aWVzIENvdW5jaWwgKFNURkMpPC9mdW5kZXJOYW1lPjxmdW5kZXJJZGVudGlmaWVyIGZ1bmRlcklkZW50aWZpZXJUeXBlPSJDcm9zc3JlZiBGdW5kZXIgSUQiPmh0dHBzOi8vZG9pLm9yZy8xMC4xMzAzOS81MDExMDAwMDAyNzE8L2Z1bmRlcklkZW50aWZpZXI+PGF3YXJkTnVtYmVyPlJCMTQxMDYwMjwvYXdhcmROdW1iZXI+PC9mdW5kaW5nUmVmZXJlbmNlPjwvZnVuZGluZ1JlZmVyZW5jZXM+PGNvbnRyaWJ1dG9ycz48Y29udHJpYnV0b3IgY29udHJpYnV0b3JUeXBlPSJSaWdodHNIb2xkZXIiPjxjb250cmlidXRvck5hbWU+VW5pdmVyc2l0eSBvZiBCYXRoPC9jb250cmlidXRvck5hbWU+PC9jb250cmlidXRvcj48L2NvbnRyaWJ1dG9ycz48bGFuZ3VhZ2U+ZW48L2xhbmd1YWdlPjxhbHRlcm5hdGVJZGVudGlmaWVycz48YWx0ZXJuYXRlSWRlbnRpZmllciBhbHRlcm5hdGVJZGVudGlmaWVyVHlwZT0iVVJMIj5odHRwOi8vcmVzZWFyY2hkYXRhLmJhdGguYWMudWsvMTE0LzwvYWx0ZXJuYXRlSWRlbnRpZmllcj48L2FsdGVybmF0ZUlkZW50aWZpZXJzPjxyZWxhdGVkSWRlbnRpZmllcnM+PHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iVVJMIiByZWxhdGlvblR5cGU9Ikhhc1BhcnQiPmh0dHA6Ly9yZXNlYXJjaGRhdGEuYmF0aC5hYy51ay8xMTQvMS9ESUZGLTEzMDU1LTEzMDQ5LVRFN19DYXJib25fMTYwbWJhcl9IMl83N0stUmViLmRhdDwvcmVsYXRlZElkZW50aWZpZXI+PHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iVVJMIiByZWxhdGlvblR5cGU9Ikhhc1BhcnQiPmh0dHA6Ly9yZXNlYXJjaGRhdGEuYmF0aC5hYy51ay8xMTQvMi9ESUZGLTEzMDYwLTEzMDQ5LVRFN19DYXJib25fNzAwbWJhcl9IMl83N0stUmViLmRhdDwvcmVsYXRlZElkZW50aWZpZXI+PHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iVVJMIiByZWxhdGlvblR5cGU9Ikhhc1BhcnQiPmh0dHA6Ly9yZXNlYXJjaGRhdGEuYmF0aC5hYy51ay8xMTQvMy9ESUZGLTEzMDYyLTEzMDQ5LVRFN19DYXJib25fMTYwMG1iYXJfSDJfNzdLLVJlYi5kYXQ8L3JlbGF0ZWRJZGVudGlmaWVyPjxyZWxhdGVkSWRlbnRpZmllciByZWxhdGVkSWRlbnRpZmllclR5cGU9IlVSTCIgcmVsYXRpb25UeXBlPSJIYXNQYXJ0Ij5odHRwOi8vcmVzZWFyY2hkYXRhLmJhdGguYWMudWsvMTE0LzQvRElGRi0xMzA2NS0xMzA0OS1URTdfQ2FyYm9uXzMwMTBtYmFyX0gyXzc3Sy1SZWIuZGF0PC9yZWxhdGVkSWRlbnRpZmllcj48cmVsYXRlZElkZW50aWZpZXIgcmVsYXRlZElkZW50aWZpZXJUeXBlPSJVUkwiIHJlbGF0aW9uVHlwZT0iSGFzUGFydCI+aHR0cDovL3Jlc2VhcmNoZGF0YS5iYXRoLmFjLnVrLzExNC81L0RJRkYtMTMwNjgtMTMwNDktVEU3X0NhcmJvbl82MzAwbWJhcl9IMl83N0stUmViLmRhdDwvcmVsYXRlZElkZW50aWZpZXI+PHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iVVJMIiByZWxhdGlvblR5cGU9Ikhhc1BhcnQiPmh0dHA6Ly9yZXNlYXJjaGRhdGEuYmF0aC5hYy51ay8xMTQvNi9ESUZGLTEzMDczLTEzMDQ5LVRFN19DYXJib25fOTk4MG1iYXJfSDJfNzdLLVJlYi5kYXQ8L3JlbGF0ZWRJZGVudGlmaWVyPjxyZWxhdGVkSWRlbnRpZmllciByZWxhdGVkSWRlbnRpZmllclR5cGU9IlVSTCIgcmVsYXRpb25UeXBlPSJIYXNQYXJ0Ij5odHRwOi8vcmVzZWFyY2hkYXRhLmJhdGguYWMudWsvMTE0LzcvRElGRi0xMzA3Ny0xMzA0OS1URTdfQ2FyYm9uXzIwNzAwbWJhcl9IMl83N0stUmViLmRhdDwvcmVsYXRlZElkZW50aWZpZXI+PHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iVVJMIiByZWxhdGlvblR5cGU9Ikhhc1BhcnQiPmh0dHA6Ly9yZXNlYXJjaGRhdGEuYmF0aC5hYy51ay8xMTQvOC9ESUZGLTEzMDYyLTEzMDQ5LVRFN19DYXJib25fMTYwMG1iYXJfSDJfNzdLLVJlYi5kYXQ8L3JlbGF0ZWRJZGVudGlmaWVyPjxyZWxhdGVkSWRlbnRpZmllciByZWxhdGVkSWRlbnRpZmllclR5cGU9IlVSTCIgcmVsYXRpb25UeXBlPSJJc0RvY3VtZW50ZWRCeSI+aHR0cDovL3Jlc2VhcmNoZGF0YS5iYXRoLmFjLnVrLzExNC85L0FDU19OYW5vX1ZfVGluZ19TdXBwbGVtZW50YXJ5X0luZm9fc3VibWl0dGVkLmRvY3g8L3JlbGF0ZWRJZGVudGlmaWVyPjxyZWxhdGVkSWRlbnRpZmllciByZWxhdGVkSWRlbnRpZmllclR5cGU9IkRPSSIgcmVsYXRpb25UeXBlPSJJc1JlZmVyZW5jZWRCeSI+MTAuMTAyMS9hY3NuYW5vLjViMDI2MjM8L3JlbGF0ZWRJZGVudGlmaWVyPjwvcmVsYXRlZElkZW50aWZpZXJzPjxzaXplcz48c2l6ZT5ESUZGLTEzMDU1LTEzMDQ5LVRFN19DYXJib25fMTYwbWJhcl9IMl83N0stUmViLmRhdCAtIDMza0I8L3NpemU+PHNpemU+RElGRi0xMzA2MC0xMzA0OS1URTdfQ2FyYm9uXzcwMG1iYXJfSDJfNzdLLVJlYi5kYXQgLSAzMmtCPC9zaXplPjxzaXplPkRJRkYtMTMwNjItMTMwNDktVEU3X0NhcmJvbl8xNjAwbWJhcl9IMl83N0stUmViLmRhdCAtIDMya0I8L3NpemU+PHNpemU+RElGRi0xMzA2NS0xMzA0OS1URTdfQ2FyYm9uXzMwMTBtYmFyX0gyXzc3Sy1SZWIuZGF0IC0gMzJrQjwvc2l6ZT48c2l6ZT5ESUZGLTEzMDY4LTEzMDQ5LVRFN19DYXJib25fNjMwMG1iYXJfSDJfNzdLLVJlYi5kYXQgLSAzMmtCPC9zaXplPjxzaXplPkRJRkYtMTMwNzMtMTMwNDktVEU3X0NhcmJvbl85OTgwbWJhcl9IMl83N0stUmViLmRhdCAtIDMxa0I8L3NpemU+PHNpemU+RElGRi0xMzA3Ny0xMzA0OS1URTdfQ2FyYm9uXzIwNzAwbWJhcl9IMl83N0stUmViLmRhdCAtIDMxa0I8L3NpemU+PHNpemU+RElGRi0xMzA2Mi0xMzA0OS1URTdfQ2FyYm9uXzE2MDBtYmFyX0gyXzc3Sy1SZWIuZGF0IC0gMzJrQjwvc2l6ZT48c2l6ZT5BQ1NfTmFub19WX1RpbmdfU3VwcGxlbWVudGFyeV9JbmZvX3N1Ym1pdHRlZC5kb2N4IC0gOTQ1a0I8L3NpemU+PC9zaXplcz48Zm9ybWF0cz48Zm9ybWF0PkRJRkYtMTMwNTUtMTMwNDktVEU3X0NhcmJvbl8xNjBtYmFyX0gyXzc3Sy1SZWIuZGF0IC0gdGV4dC9wbGFpbjwvZm9ybWF0Pjxmb3JtYXQ+RElGRi0xMzA2MC0xMzA0OS1URTdfQ2FyYm9uXzcwMG1iYXJfSDJfNzdLLVJlYi5kYXQgLSB0ZXh0L3BsYWluPC9mb3JtYXQ+PGZvcm1hdD5ESUZGLTEzMDYyLTEzMDQ5LVRFN19DYXJib25fMTYwMG1iYXJfSDJfNzdLLVJlYi5kYXQgLSB0ZXh0L3BsYWluPC9mb3JtYXQ+PGZvcm1hdD5ESUZGLTEzMDY1LTEzMDQ5LVRFN19DYXJib25fMzAxMG1iYXJfSDJfNzdLLVJlYi5kYXQgLSB0ZXh0L3BsYWluPC9mb3JtYXQ+PGZvcm1hdD5ESUZGLTEzMDY4LTEzMDQ5LVRFN19DYXJib25fNjMwMG1iYXJfSDJfNzdLLVJlYi5kYXQgLSB0ZXh0L3BsYWluPC9mb3JtYXQ+PGZvcm1hdD5ESUZGLTEzMDczLTEzMDQ5LVRFN19DYXJib25fOTk4MG1iYXJfSDJfNzdLLVJlYi5kYXQgLSB0ZXh0L3BsYWluPC9mb3JtYXQ+PGZvcm1hdD5ESUZGLTEzMDc3LTEzMDQ5LVRFN19DYXJib25fMjA3MDBtYmFyX0gyXzc3Sy1SZWIuZGF0IC0gdGV4dC9wbGFpbjwvZm9ybWF0Pjxmb3JtYXQ+RElGRi0xMzA2Mi0xMzA0OS1URTdfQ2FyYm9uXzE2MDBtYmFyX0gyXzc3Sy1SZWIuZGF0IC0gdGV4dC9wbGFpbjwvZm9ybWF0Pjxmb3JtYXQ+QUNTX05hbm9fVl9UaW5nX1N1cHBsZW1lbnRhcnlfSW5mb19zdWJtaXR0ZWQuZG9jeCAtIGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50PC9mb3JtYXQ+PC9mb3JtYXRzPjx2ZXJzaW9uPjE8L3ZlcnNpb24+PHJpZ2h0c0xpc3Q+PHJpZ2h0cz5ESUZGLTEzMDU1LTEzMDQ5LVRFN19DYXJib25fMTYwbWJhcl9IMl83N0stUmViLmRhdCBoYXMgbm8gYXNzb2NpYXRlZCBsaWNlbmNlLiAgUGxlYXNlIGNvbnRhY3QgdGhlIGFyY2hpdmUgZm9yIGFkdmljZS48L3JpZ2h0cz48cmlnaHRzPkRJRkYtMTMwNjAtMTMwNDktVEU3X0NhcmJvbl83MDBtYmFyX0gyXzc3Sy1SZWIuZGF0IGhhcyBubyBhc3NvY2lhdGVkIGxpY2VuY2UuICBQbGVhc2UgY29udGFjdCB0aGUgYXJjaGl2ZSBmb3IgYWR2aWNlLjwvcmlnaHRzPjxyaWdodHM+RElGRi0xMzA2Mi0xMzA0OS1URTdfQ2FyYm9uXzE2MDBtYmFyX0gyXzc3Sy1SZWIuZGF0IGhhcyBubyBhc3NvY2lhdGVkIGxpY2VuY2UuICBQbGVhc2UgY29udGFjdCB0aGUgYXJjaGl2ZSBmb3IgYWR2aWNlLjwvcmlnaHRzPjxyaWdodHM+RElGRi0xMzA2NS0xMzA0OS1URTdfQ2FyYm9uXzMwMTBtYmFyX0gyXzc3Sy1SZWIuZGF0IGhhcyBubyBhc3NvY2lhdGVkIGxpY2VuY2UuICBQbGVhc2UgY29udGFjdCB0aGUgYXJjaGl2ZSBmb3IgYWR2aWNlLjwvcmlnaHRzPjxyaWdodHM+RElGRi0xMzA2OC0xMzA0OS1URTdfQ2FyYm9uXzYzMDBtYmFyX0gyXzc3Sy1SZWIuZGF0IGhhcyBubyBhc3NvY2lhdGVkIGxpY2VuY2UuICBQbGVhc2UgY29udGFjdCB0aGUgYXJjaGl2ZSBmb3IgYWR2aWNlLjwvcmlnaHRzPjxyaWdodHM+RElGRi0xMzA3My0xMzA0OS1URTdfQ2FyYm9uXzk5ODBtYmFyX0gyXzc3Sy1SZWIuZGF0IGhhcyBubyBhc3NvY2lhdGVkIGxpY2VuY2UuICBQbGVhc2UgY29udGFjdCB0aGUgYXJjaGl2ZSBmb3IgYWR2aWNlLjwvcmlnaHRzPjxyaWdodHM+RElGRi0xMzA3Ny0xMzA0OS1URTdfQ2FyYm9uXzIwNzAwbWJhcl9IMl83N0stUmViLmRhdCBoYXMgbm8gYXNzb2NpYXRlZCBsaWNlbmNlLiAgUGxlYXNlIGNvbnRhY3QgdGhlIGFyY2hpdmUgZm9yIGFkdmljZS48L3JpZ2h0cz48cmlnaHRzPkRJRkYtMTMwNjItMTMwNDktVEU3X0NhcmJvbl8xNjAwbWJhcl9IMl83N0stUmViLmRhdCBoYXMgbm8gYXNzb2NpYXRlZCBsaWNlbmNlLiAgUGxlYXNlIGNvbnRhY3QgdGhlIGFyY2hpdmUgZm9yIGFkdmljZS48L3JpZ2h0cz48cmlnaHRzPkFDU19OYW5vX1ZfVGluZ19TdXBwbGVtZW50YXJ5X0luZm9fc3VibWl0dGVkLmRvY3ggaGFzIG5vIGFzc29jaWF0ZWQgbGljZW5jZS4gIFBsZWFzZSBjb250YWN0IHRoZSBhcmNoaXZlIGZvciBhZHZpY2UuPC9yaWdodHM+PC9yaWdodHNMaXN0PjxkZXNjcmlwdGlvbnM+PGRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uVHlwZT0iQWJzdHJhY3QiPkRhdGFzZXQgZm9yIERpcmVjdCBFdmlkZW5jZSBmb3IgU29saWQtTGlrZSBIeWRyb2dlbiBpbiBhIE5hbm9wb3JvdXMgQ2FyYm9uIEh5ZHJvZ2VuIFN0b3JhZ2UgTWF0ZXJpYWwgYXQgU3VwZXJjcml0aWNhbCBUZW1wZXJhdHVyZXMgam91cm5hbCBwYXBlci4mIzEzOwpUaGUgIGRhdGEgc2V0IGluY2x1ZGVzIGluZWxhc3RpYyBuZXV0cm9uIHNjYXR0ZXJpbmcgZGF0YSByYXcgZGF0YSBmaWxlcyAoLmRhdCkgY29sbGVjdGVkIG9uIHRoZSBUT1NDQSBpbnN0cnVtZW50IGF0IHRoZSBJU0lTIG5ldXRyb24gZmFjaWxpdHksIGF0IHRoZSBSdXRoZXJmb3JkIEFwcGxldG9uIExhYm9yYXRvcmllcywgVUsgYXQgdGhlIGZvbGxvd2luZyBoeWRyb2dlbiBwcmVzc3VyZXMgKGF0IDc3IEspIGZvciBhY3RpdmF0ZWQgY2FyYm9uIFRFNzomIzEzOwowLjAxNiBNUGEgSDIgYXQgNzcgSyAmIzEzOwowLjA3NCBNUGEgSDIgYXQgNzcgSyAmIzEzOwowLjE2OCBNUGEgSDIgYXQgNzcgSyAmIzEzOwowLjMwMCBNUGEgSDIgYXQgNzcgSyAmIzEzOwowLjYzMCBNUGEgSDIgYXQgNzcgSyAmIzEzOwowLjk5OCBNUGEgSDIgYXQgNzcgSyAmIzEzOwoyLjA3MSBNUGEgSDIgYXQgNzcgSyAmIzEzOwozLjUwMCBNUGEgSDIgYXQgNzcgSyYjMTM7ClRoaXMgZGF0YSBwZXJ0YWlucyB0byBGaWdzIDEsIDIgYW5kIDMgaW4gdGhlIHBhcGVyICZhbXA7cXVvdDsgRGlyZWN0IEV2aWRlbmNlIGZvciBTb2xpZC1MaWtlIEh5ZHJvZ2VuIGluIGEgTmFub3Bvcm91cyBDYXJib24gSHlkcm9nZW4gU3RvcmFnZSBNYXRlcmlhbCBhdCBTdXBlcmNyaXRpY2FsIFRlbXBlcmF0dXJlcyZhbXA7cXVvdDsgKEFDUyBOYW5vLCAyMDE1KS4mIzEzOwomIzEzOwpUaGUgaW50ZWdyYXRlZCBpbnRlbnNpdGllcyB1bmRlciB0aGUgcGVha3Mgd2VyZSBjYWxjdWxhdGVkIGZyb20gdGhlIHJhdyBkYXRhIG92ZXIgdGhlIGZvbGxvd2luZyByYW5nZXM6JiMxMzsKLSBUaGUgdG90YWwgaW5lbGFzdGljIHNpZ25hbCAoaW50ZWdyYXRlZCBpbnRlbnNpdHkgZnJvbSAyIHRvIDUwMCBtZVYpLiAmIzEzOwotIEludGVncmF0ZWQgaW50ZW5zaXR5IHVuZGVyIHRoZSBlbGFzdGljIHBlYWsgZnJvbSAtMiBtZVYgdG8gMiBtZVYuJiMxMzsKLSBJbnRlZ3JhdGVkIGludGVuc2l0eSB1bmRlciB0aGUgMTQuNyBtZVYgcm90b3IgbGluZSBmaXQgdXNpbmcgYSBHYXVzc2lhbiBwZWFrIHNoYXBlJiMxMzsKJiMxMzsKVGhlIGRhdGEgcHJvY2Vzc2luZyBhbmQgcGVhayBpbnRlZ3JhdGlvbiB3YXMgcGVyZm9ybWVkIHVzaW5nIHRoZSBNYW50aWQgc29mdHdhcmUgKGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cubWFudGlkcHJvamVjdC5vcmcpLjwvZGVzY3JpcHRpb24+PGRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uVHlwZT0iTWV0aG9kcyI+VGhlIElOUyBzcGVjdHJhIHdlcmUgY29sbGVjdGVkIG9uIGEg4oi8MTAgZyBzYW1wbGUgb2YgY2FyYm9uIHdhcyBkZWdhc3NlZCA2MjMgSyBmb3IgOCBoIHVuZGVyIGhpZ2ggdmFjdXVtICgwLjEgbVBhKSwgdGhlbiBsb2FkZWQgaW4gYW4gQXIgZ2xvdmVib3ggaW50byBhIGhpZ2ggcHJlc3N1cmUgKDcgTVBhKSBzdGFpbmxlc3Mgc3RlZWwgc2FtcGxlIGNhbiBvbiB0aGUgVE9TQ0EgaW5lbGFzdGljJiMxMzsKbmV1dHJvbiBzY2F0dGVyaW5nIGJlYW1saW5lIGF0IHRoZSBSdXRoZXJmb3JkIEFwcGxldG9uIGxhYm9yYXRvcmllcyYjMTM7CmluIHRoZSBVSy4gSHlkcm9nZW4gd2FzIGRvc2VkIGludG8gdGhlIHNhbXBsZSBhbmQgZXF1aWxpYnJhdGVkIGF0IDc3IEsgYmVmb3JlIHRoZSBwcmVzc3VyZSB3YXMgcmVjb3JkZWQuIERhdGEgd2VyZSBhY2N1bXVsYXRlZCBmb3IgNzAwIM68QSBoLCB3aXRoIHVwIHRvIHRocmVlIHNwZWN0cmEgYmVpbmcgY29sbGVjdGVkIGF0IGVhY2ggcHJlc3N1cmUgb3ZlciBjb2xsZWN0aW9uIHBlcmlvZHMgb2YgOC0gMTIgaCAocHJlc3N1cmVzID0gMC4wMTYsIDAuMDcwLCAwLjE2MCwgMC4zMDEsIDAuNjMwLCAwLjk5OCwgMi4wNzAsIGFuZCAzLjUwMCBNUGEpLjwvZGVzY3JpcHRpb24+PGRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uVHlwZT0iTWV0aG9kcyI+VGhlIGRhdGEgd2VyZSBjb3JyZWN0ZWQgZm9yIHRoZSBwcmVzZW5jZSBvZiB0ZXJtaW5hbCBIIGF0b21zIGluIHRoZSBjYXJib24gYnkgc3VidHJhY3Rpb24gb2YgMTIgaCBiYWNrZ3JvdW5kIHNjYW5zIG9mIHRoZSBkZWdhc3NlZCBzYW1wbGUgYXQgNzcgSy4gJiMxMzsKVGhlIGRhdGEgcHJvY2Vzc2luZyBhbmQgcGVhayBpbnRlZ3JhdGlvbiB3YXMgcGVyZm9ybWVkIHVzaW5nIHRoZSYjMTM7Ck1hbnRpZCBzb2Z0d2FyZSAoYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5tYW50aWRwcm9qZWN0Lm9yZykuPC9kZXNjcmlwdGlvbj48ZGVzY3JpcHRpb24gZGVzY3JpcHRpb25UeXBlPSJNZXRob2RzIj5Ob3JtYWwgaHlkcm9nZW4gZ2FzICB3YXMgdXNlZCAoQWlyIExpcXVpZGUsIDk5Ljk5OSUgcHVyaXR5KTwvZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbnM+PGdlb0xvY2F0aW9ucz48Z2VvTG9jYXRpb24+PGdlb0xvY2F0aW9uUGxhY2U+VUs8L2dlb0xvY2F0aW9uUGxhY2U+PC9nZW9Mb2NhdGlvbj48L2dlb0xvY2F0aW9ucz48L3Jlc291cmNlPg==","minted":"2015-12-16T11:50:06Z","updated":"2017-02-16T12:21:39Z","doi":"10.15125/BATH-00114"}]}}
95
+
96
+ '
97
+ http_version:
98
+ recorded_at: Mon, 05 Jun 2017 13:36:39 GMT
99
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,144 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.crossref.org/openurl/?format=unixref&id=doi:10.1101/097196&noredirect=true&pid=tech@datacite.org
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Maremma - https://github.com/datacite/maremma
12
+ Accept:
13
+ - text/xml
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: ''
18
+ headers:
19
+ Server:
20
+ - Apache-Coyote/1.1
21
+ Crossref-Deployment-Name:
22
+ - qs2-2
23
+ Content-Type:
24
+ - text/xml;charset=UTF-8
25
+ Content-Language:
26
+ - en-US
27
+ Date:
28
+ - Mon, 05 Jun 2017 12:18:52 GMT
29
+ Connection:
30
+ - close
31
+ body:
32
+ encoding: ASCII-8BIT
33
+ string: !binary |-
34
+ PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGRvaV9y
35
+ ZWNvcmRzPg0KICA8ZG9pX3JlY29yZCBvd25lcj0iMTAuMTEwMSIgdGltZXN0
36
+ YW1wPSIyMDE2LTEyLTI5IDAxOjEwOjIwIj4NCiAgICA8Y3Jvc3NyZWY+DQog
37
+ ICAgICA8cG9zdGVkX2NvbnRlbnQgdHlwZT0icHJlcHJpbnQiIGxhbmd1YWdl
38
+ PSJlbiIgbWV0YWRhdGFfZGlzdHJpYnV0aW9uX29wdHM9ImFueSI+DQogICAg
39
+ ICAgIDxncm91cF90aXRsZT5TY2llbnRpZmljIENvbW11bmljYXRpb24gYW5k
40
+ IEVkdWNhdGlvbjwvZ3JvdXBfdGl0bGU+DQogICAgICAgIDxjb250cmlidXRv
41
+ cnM+DQogICAgICAgICAgPHBlcnNvbl9uYW1lIGNvbnRyaWJ1dG9yX3JvbGU9
42
+ ImF1dGhvciIgc2VxdWVuY2U9ImZpcnN0Ij4NCiAgICAgICAgICAgIDxnaXZl
43
+ bl9uYW1lPk1hcnRpbjwvZ2l2ZW5fbmFtZT4NCiAgICAgICAgICAgIDxzdXJu
44
+ YW1lPkZlbm5lcjwvc3VybmFtZT4NCiAgICAgICAgICAgIDxPUkNJRD5odHRw
45
+ Oi8vb3JjaWQub3JnLzAwMDAtMDAwMy0xNDE5LTI0MDU8L09SQ0lEPg0KICAg
46
+ ICAgICAgIDwvcGVyc29uX25hbWU+DQogICAgICAgICAgPHBlcnNvbl9uYW1l
47
+ IGNvbnRyaWJ1dG9yX3JvbGU9ImF1dGhvciIgc2VxdWVuY2U9ImFkZGl0aW9u
48
+ YWwiPg0KICAgICAgICAgICAgPGdpdmVuX25hbWU+TWVyY8OoPC9naXZlbl9u
49
+ YW1lPg0KICAgICAgICAgICAgPHN1cm5hbWU+Q3Jvc2FzPC9zdXJuYW1lPg0K
50
+ ICAgICAgICAgICAgPE9SQ0lEPmh0dHA6Ly9vcmNpZC5vcmcvMDAwMC0wMDAz
51
+ LTEzMDQtMTkzOTwvT1JDSUQ+DQogICAgICAgICAgPC9wZXJzb25fbmFtZT4N
52
+ CiAgICAgICAgICA8cGVyc29uX25hbWUgY29udHJpYnV0b3Jfcm9sZT0iYXV0
53
+ aG9yIiBzZXF1ZW5jZT0iYWRkaXRpb25hbCI+DQogICAgICAgICAgICA8Z2l2
54
+ ZW5fbmFtZT5KZWZmcmV5PC9naXZlbl9uYW1lPg0KICAgICAgICAgICAgPHN1
55
+ cm5hbWU+R3JldGhlPC9zdXJuYW1lPg0KICAgICAgICAgICAgPE9SQ0lEPmh0
56
+ dHA6Ly9vcmNpZC5vcmcvMDAwMC0wMDAxLTUyMTItNzA1MjwvT1JDSUQ+DQog
57
+ ICAgICAgICAgPC9wZXJzb25fbmFtZT4NCiAgICAgICAgICA8cGVyc29uX25h
58
+ bWUgY29udHJpYnV0b3Jfcm9sZT0iYXV0aG9yIiBzZXF1ZW5jZT0iYWRkaXRp
59
+ b25hbCI+DQogICAgICAgICAgICA8Z2l2ZW5fbmFtZT5EYXZpZDwvZ2l2ZW5f
60
+ bmFtZT4NCiAgICAgICAgICAgIDxzdXJuYW1lPktlbm5lZHk8L3N1cm5hbWU+
61
+ DQogICAgICAgICAgICA8T1JDSUQ+aHR0cDovL29yY2lkLm9yZy8wMDAwLTAw
62
+ MDItOTM3Ny0wNzk3PC9PUkNJRD4NCiAgICAgICAgICA8L3BlcnNvbl9uYW1l
63
+ Pg0KICAgICAgICAgIDxwZXJzb25fbmFtZSBjb250cmlidXRvcl9yb2xlPSJh
64
+ dXRob3IiIHNlcXVlbmNlPSJhZGRpdGlvbmFsIj4NCiAgICAgICAgICAgIDxn
65
+ aXZlbl9uYW1lPkhlbm5pbmc8L2dpdmVuX25hbWU+DQogICAgICAgICAgICA8
66
+ c3VybmFtZT5IZXJtamFrb2I8L3N1cm5hbWU+DQogICAgICAgICAgICA8T1JD
67
+ SUQ+aHR0cDovL29yY2lkLm9yZy8wMDAwLTAwMDEtODQ3OS0wMjYyPC9PUkNJ
68
+ RD4NCiAgICAgICAgICA8L3BlcnNvbl9uYW1lPg0KICAgICAgICAgIDxwZXJz
69
+ b25fbmFtZSBjb250cmlidXRvcl9yb2xlPSJhdXRob3IiIHNlcXVlbmNlPSJh
70
+ ZGRpdGlvbmFsIj4NCiAgICAgICAgICAgIDxnaXZlbl9uYW1lPlBoaWxpcHBl
71
+ PC9naXZlbl9uYW1lPg0KICAgICAgICAgICAgPHN1cm5hbWU+Um9jY2EtU2Vy
72
+ cmE8L3N1cm5hbWU+DQogICAgICAgICAgICA8T1JDSUQ+aHR0cDovL29yY2lk
73
+ Lm9yZy8wMDAwLTAwMDEtOTg1My01NjY4PC9PUkNJRD4NCiAgICAgICAgICA8
74
+ L3BlcnNvbl9uYW1lPg0KICAgICAgICAgIDxwZXJzb25fbmFtZSBjb250cmli
75
+ dXRvcl9yb2xlPSJhdXRob3IiIHNlcXVlbmNlPSJhZGRpdGlvbmFsIj4NCiAg
76
+ ICAgICAgICAgIDxnaXZlbl9uYW1lPlJvYmluPC9naXZlbl9uYW1lPg0KICAg
77
+ ICAgICAgICAgPHN1cm5hbWU+QmVyam9uPC9zdXJuYW1lPg0KICAgICAgICAg
78
+ ICAgPE9SQ0lEPmh0dHA6Ly9vcmNpZC5vcmcvMDAwMC0wMDAyLTE3MzEtNTM0
79
+ NjwvT1JDSUQ+DQogICAgICAgICAgPC9wZXJzb25fbmFtZT4NCiAgICAgICAg
80
+ ICA8cGVyc29uX25hbWUgY29udHJpYnV0b3Jfcm9sZT0iYXV0aG9yIiBzZXF1
81
+ ZW5jZT0iYWRkaXRpb25hbCI+DQogICAgICAgICAgICA8Z2l2ZW5fbmFtZT5T
82
+ ZWJhc3RpYW48L2dpdmVuX25hbWU+DQogICAgICAgICAgICA8c3VybmFtZT5L
83
+ YXJjaGVyPC9zdXJuYW1lPg0KICAgICAgICAgICAgPE9SQ0lEPmh0dHA6Ly9v
84
+ cmNpZC5vcmcvMDAwMC0wMDAxLTgyNDktNzM4ODwvT1JDSUQ+DQogICAgICAg
85
+ ICAgPC9wZXJzb25fbmFtZT4NCiAgICAgICAgICA8cGVyc29uX25hbWUgY29u
86
+ dHJpYnV0b3Jfcm9sZT0iYXV0aG9yIiBzZXF1ZW5jZT0iYWRkaXRpb25hbCI+
87
+ DQogICAgICAgICAgICA8Z2l2ZW5fbmFtZT5NYXJ5YW5uPC9naXZlbl9uYW1l
88
+ Pg0KICAgICAgICAgICAgPHN1cm5hbWU+TWFydG9uZTwvc3VybmFtZT4NCiAg
89
+ ICAgICAgICAgIDxPUkNJRD5odHRwOi8vb3JjaWQub3JnLzAwMDAtMDAwMi04
90
+ NDA2LTM4NzE8L09SQ0lEPg0KICAgICAgICAgIDwvcGVyc29uX25hbWU+DQog
91
+ ICAgICAgICAgPHBlcnNvbl9uYW1lIGNvbnRyaWJ1dG9yX3JvbGU9ImF1dGhv
92
+ ciIgc2VxdWVuY2U9ImFkZGl0aW9uYWwiPg0KICAgICAgICAgICAgPGdpdmVu
93
+ X25hbWU+VGltb3RoeTwvZ2l2ZW5fbmFtZT4NCiAgICAgICAgICAgIDxzdXJu
94
+ YW1lPkNsYXJrPC9zdXJuYW1lPg0KICAgICAgICAgICAgPE9SQ0lEPmh0dHA6
95
+ Ly9vcmNpZC5vcmcvMDAwMC0wMDAzLTQwNjAtNzM2MDwvT1JDSUQ+DQogICAg
96
+ ICAgICAgPC9wZXJzb25fbmFtZT4NCiAgICAgICAgPC9jb250cmlidXRvcnM+
97
+ DQogICAgICAgIDx0aXRsZXM+DQogICAgICAgICAgPHRpdGxlPkEgRGF0YSBD
98
+ aXRhdGlvbiBSb2FkbWFwIGZvciBTY2hvbGFybHkgRGF0YSBSZXBvc2l0b3Jp
99
+ ZXM8L3RpdGxlPg0KICAgICAgICA8L3RpdGxlcz4NCiAgICAgICAgPHBvc3Rl
100
+ ZF9kYXRlPg0KICAgICAgICAgIDxtb250aD4xMjwvbW9udGg+DQogICAgICAg
101
+ ICAgPGRheT4yODwvZGF5Pg0KICAgICAgICAgIDx5ZWFyPjIwMTY8L3llYXI+
102
+ DQogICAgICAgIDwvcG9zdGVkX2RhdGU+DQogICAgICAgIDxhY2NlcHRhbmNl
103
+ X2RhdGU+DQogICAgICAgICAgPG1vbnRoPjEyPC9tb250aD4NCiAgICAgICAg
104
+ ICA8ZGF5PjI4PC9kYXk+DQogICAgICAgICAgPHllYXI+MjAxNjwveWVhcj4N
105
+ CiAgICAgICAgPC9hY2NlcHRhbmNlX2RhdGU+DQogICAgICAgIDxpbnN0aXR1
106
+ dGlvbj4NCiAgICAgICAgICA8aW5zdGl0dXRpb25fbmFtZT5iaW9SeGl2PC9p
107
+ bnN0aXR1dGlvbl9uYW1lPg0KICAgICAgICA8L2luc3RpdHV0aW9uPg0KICAg
108
+ ICAgICA8aXRlbV9udW1iZXIgaXRlbV9udW1iZXJfdHlwZT0icGlzYSI+Ymlv
109
+ cnhpdjswOTcxOTZ2MTwvaXRlbV9udW1iZXI+DQogICAgICAgIDxhYnN0cmFj
110
+ dD4NCiAgICAgICAgICA8cD5UaGlzIGFydGljbGUgcHJlc2VudHMgYSBwcmFj
111
+ dGljYWwgcm9hZG1hcCBmb3Igc2Nob2xhcmx5IGRhdGEgcmVwb3NpdG9yaWVz
112
+ IHRvIGltcGxlbWVudCBkYXRhIGNpdGF0aW9uIGluIGFjY29yZGFuY2Ugd2l0
113
+ aCB0aGUgSm9pbnQgRGVjbGFyYXRpb24gb2YgRGF0YSBDaXRhdGlvbiBQcmlu
114
+ Y2lwbGVzIChEYXRhIENpdGF0aW9uIFN5bnRoZXNpcyBHcm91cCwgMjAxNCks
115
+ IGEgc3lub3BzaXMgYW5kIGhhcm1vbml6YXRpb24gb2YgdGhlIHJlY29tbWVu
116
+ ZGF0aW9ucyBvZiBtYWpvciBzY2llbmNlIHBvbGljeSBib2RpZXMuIFRoZSBy
117
+ b2FkbWFwIHdhcyBkZXZlbG9wZWQgYnkgdGhlIFJlcG9zaXRvcmllcyBFYXJs
118
+ eSBBZG9wdGVycyBFeHBlcnQgR3JvdXAsICBwYXJ0IG9mIHRoZSBEYXRhIENp
119
+ dGF0aW9uIEltcGxlbWVudGF0aW9uIFBpbG90IChEQ0lQKSBwcm9qZWN0IChG
120
+ T1JDRTExLCAyMDE1KSwgYW4gaW5pdGlhdGl2ZSBvZiBGT1JDRTExLm9yZyBh
121
+ bmQgdGhlIE5JSCBCaW9DQURESUUgKDIwMTYpIHByb2dyYW0uIFRoZSByb2Fk
122
+ bWFwIG1ha2VzIDExIHNwZWNpZmljIHJlY29tbWVuZGF0aW9ucywgZ3JvdXBl
123
+ ZCBpbnRvIHRocmVlIHBoYXNlcyBvZiBpbXBsZW1lbnRhdGlvbjogYSkgcmVx
124
+ dWlyZWQgc3RlcHMgbmVlZGVkIHRvIHN1cHBvcnQgdGhlIEpvaW50IERlY2xh
125
+ cmF0aW9uIG9mIERhdGEgQ2l0YXRpb24gUHJpbmNpcGxlcywgYikgcmVjb21t
126
+ ZW5kZWQgc3RlcHMgdGhhdCBmYWNpbGl0YXRlIGFydGljbGUvZGF0YSBwdWJs
127
+ aWNhdGlvbiB3b3JrZmxvd3MsIGFuZCBjKSBvcHRpb25hbCBzdGVwcyB0aGF0
128
+ IGZ1cnRoZXIgaW1wcm92ZSBkYXRhIGNpdGF0aW9uIHN1cHBvcnQgcHJvdmlk
129
+ ZWQgYnkgZGF0YSByZXBvc2l0b3JpZXMuPC9wPg0KICAgICAgICA8L2Fic3Ry
130
+ YWN0Pg0KICAgICAgICA8ZG9pX2RhdGE+DQogICAgICAgICAgPGRvaT4xMC4x
131
+ MTAxLzA5NzE5NjwvZG9pPg0KICAgICAgICAgIDx0aW1lc3RhbXA+MjAxNjEy
132
+ MjgyMjEwMDY0OTAwMDwvdGltZXN0YW1wPg0KICAgICAgICAgIDxyZXNvdXJj
133
+ ZT5odHRwOi8vYmlvcnhpdi5vcmcvbG9va3VwL2RvaS8xMC4xMTAxLzA5NzE5
134
+ NjwvcmVzb3VyY2U+DQogICAgICAgICAgPGNvbGxlY3Rpb24gcHJvcGVydHk9
135
+ ImNyYXdsZXItYmFzZWQiPg0KICAgICAgICAgICAgPGl0ZW0gY3Jhd2xlcj0i
136
+ aVBhcmFkaWdtcyI+DQogICAgICAgICAgICAgIDxyZXNvdXJjZT5odHRwczov
137
+ L3N5bmRpY2F0aW9uLmhpZ2h3aXJlLm9yZy9jb250ZW50L2RvaS8xMC4xMTAx
138
+ LzA5NzE5NjwvcmVzb3VyY2U+DQogICAgICAgICAgICA8L2l0ZW0+DQogICAg
139
+ ICAgICAgPC9jb2xsZWN0aW9uPg0KICAgICAgICA8L2RvaV9kYXRhPg0KICAg
140
+ ICAgPC9wb3N0ZWRfY29udGVudD4NCiAgICA8L2Nyb3NzcmVmPg0KICA8L2Rv
141
+ aV9yZWNvcmQ+DQo8L2RvaV9yZWNvcmRzPg==
142
+ http_version:
143
+ recorded_at: Mon, 05 Jun 2017 12:18:52 GMT
144
+ recorded_with: VCR 3.0.3