octokit 0.6.5 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/.rspec +1 -2
  2. data/.travis.yml +0 -1
  3. data/CHANGELOG.md +1 -0
  4. data/Gemfile +1 -1
  5. data/README.md +41 -28
  6. data/Rakefile +11 -0
  7. data/lib/faraday/response/raise_octokit_error.rb +4 -2
  8. data/lib/octokit/client.rb +2 -0
  9. data/lib/octokit/client/commits.rb +12 -0
  10. data/lib/octokit/client/events.rb +26 -0
  11. data/lib/octokit/client/issues.rb +35 -7
  12. data/lib/octokit/client/labels.rb +5 -5
  13. data/lib/octokit/client/objects.rb +10 -6
  14. data/lib/octokit/client/organizations.rb +25 -21
  15. data/lib/octokit/client/pub_sub_hubbub/service_hooks.rb +2 -2
  16. data/lib/octokit/client/pulls.rb +4 -4
  17. data/lib/octokit/client/repositories.rb +18 -18
  18. data/lib/octokit/client/users.rb +19 -14
  19. data/lib/octokit/configuration.rb +14 -11
  20. data/lib/octokit/connection.rb +3 -3
  21. data/lib/octokit/request.rb +17 -1
  22. data/lib/octokit/version.rb +1 -1
  23. data/octokit.gemspec +13 -12
  24. data/spec/fixtures/v3/blob.json +7 -0
  25. data/spec/fixtures/v3/commit_comment.json +19 -0
  26. data/spec/fixtures/v3/commit_comments.json +78 -0
  27. data/spec/fixtures/v3/emails.json +4 -0
  28. data/spec/fixtures/v3/followers.json +212 -0
  29. data/spec/fixtures/v3/following.json +209 -0
  30. data/spec/fixtures/v3/issue.json +37 -0
  31. data/spec/fixtures/v3/issue_closed.json +37 -0
  32. data/spec/fixtures/v3/issue_event.json +44 -0
  33. data/spec/fixtures/v3/issue_events.json +72 -0
  34. data/spec/fixtures/v3/list_commit_comments.json +572 -0
  35. data/spec/fixtures/v3/organization-repositories.json +4292 -0
  36. data/spec/fixtures/v3/organization-repository.json +42 -0
  37. data/spec/fixtures/v3/organization.json +18 -0
  38. data/spec/fixtures/v3/organization_members.json +576 -0
  39. data/spec/fixtures/v3/organization_team_members.json +16 -0
  40. data/spec/fixtures/v3/organization_team_repos.json +62 -0
  41. data/spec/fixtures/v3/organizations.json +44 -0
  42. data/spec/fixtures/v3/public_events.json +1110 -0
  43. data/spec/fixtures/v3/pull_created.json +138 -0
  44. data/spec/fixtures/v3/pull_request.json +138 -0
  45. data/spec/fixtures/v3/pull_requests.json +187 -0
  46. data/spec/fixtures/v3/repo_events.json +1668 -0
  47. data/spec/fixtures/v3/repo_issues_events.json +134 -0
  48. data/spec/fixtures/v3/team.json +8 -0
  49. data/spec/fixtures/v3/teams.json +4 -4
  50. data/spec/fixtures/v3/tree.json +112 -0
  51. data/spec/fixtures/v3/watched.json +1022 -0
  52. data/spec/helper.rb +3 -3
  53. data/spec/octokit/client/commits_spec.rb +33 -0
  54. data/spec/octokit/client/events_spec.rb +27 -0
  55. data/spec/octokit/client/issue_events_spec.rb +30 -0
  56. data/spec/octokit/client/issues_spec.rb +31 -20
  57. data/spec/octokit/client/labels_spec.rb +1 -1
  58. data/spec/octokit/client/objects_spec.rb +9 -8
  59. data/spec/octokit/client/organizations_spec.rb +56 -67
  60. data/spec/octokit/client/pulls_spec.rb +19 -18
  61. data/spec/octokit/client/repositories_spec.rb +24 -38
  62. data/spec/octokit/client/users_spec.rb +50 -51
  63. data/spec/octokit/client_spec.rb +16 -0
  64. metadata +111 -81
  65. data/puppeteer.jpg +0 -0
  66. data/spec/fixtures/v2/blob.json +0 -1
  67. data/spec/fixtures/v2/comment.json +0 -1
  68. data/spec/fixtures/v2/comments.json +0 -1
  69. data/spec/fixtures/v2/delete_failure.json +0 -1
  70. data/spec/fixtures/v2/delete_token.json +0 -1
  71. data/spec/fixtures/v2/emails.json +0 -1
  72. data/spec/fixtures/v2/followers.json +0 -1
  73. data/spec/fixtures/v2/following.json +0 -1
  74. data/spec/fixtures/v2/issue.json +0 -1
  75. data/spec/fixtures/v2/labels.json +0 -1
  76. data/spec/fixtures/v2/organization.json +0 -1
  77. data/spec/fixtures/v2/organizations.json +0 -1
  78. data/spec/fixtures/v2/public_keys.json +0 -1
  79. data/spec/fixtures/v2/pull.json +0 -1
  80. data/spec/fixtures/v2/pulls.json +0 -1
  81. data/spec/fixtures/v2/tags.json +0 -1
  82. data/spec/fixtures/v2/team.json +0 -1
  83. data/spec/fixtures/v2/teams.json +0 -1
  84. data/spec/fixtures/v2/tree.json +0 -1
@@ -11,7 +11,7 @@ module Octokit
11
11
  # Please refer Data node for complete list of arguments.
12
12
  # @example Subscribe to push events to one of your repositories to Travis-CI
13
13
  # client = Octokit::Client.new(:oauth_token = "token")
14
- # client.subscribe_service_hook('joshk', 'device_imapable', 'Travis', { :token => "test", :domain => "domain", :user => "user" })
14
+ # client.subscribe_service_hook('joshk/device_imapable', 'Travis', { :token => "test", :domain => "domain", :user => "user" })
15
15
  def subscribe_service_hook(repo, service_name, service_arguments = {})
16
16
  topic = "https://github.com/#{Repository.new(repo)}/events/push"
17
17
  callback = "github://#{service_name}?#{service_arguments.collect{ |k,v| [ k,v ].join("=") }.join("&") }"
@@ -26,7 +26,7 @@ module Octokit
26
26
  # List of services is available @ https://github.com/github/github-services/tree/master/docs.
27
27
  # @example Subscribe to push events to one of your repositories to Travis-CI
28
28
  # client = Octokit::Client.new(:oauth_token = "token")
29
- # client.unsubscribe_service_hook('joshk', 'device_imapable', 'Travis')
29
+ # client.unsubscribe_service_hook('joshk/device_imapable', 'Travis')
30
30
  def unsubscribe_service_hook(repo, service_name)
31
31
  topic = "https://github.com/#{Repository.new(repo)}/events/push"
32
32
  callback = "github://#{service_name}"
@@ -8,7 +8,7 @@ module Octokit
8
8
  :title => title,
9
9
  :body => body,
10
10
  }
11
- post("/api/v2/json/pulls/#{Repository.new(repo)}", options.merge({:pull => pull}))['pulls']
11
+ post("repos/#{Repository.new(repo)}/pulls", options.merge({:pull => pull}))
12
12
  end
13
13
 
14
14
  def create_pull_request_for_issue(repo, base, head, issue, options={})
@@ -17,16 +17,16 @@ module Octokit
17
17
  :head => head,
18
18
  :issue => issue
19
19
  }
20
- post("/api/v2/json/pulls/#{Repository.new(repo)}", options.merge({:pull => pull}))['pulls']
20
+ post("repos/#{Repository.new(repo)}/pulls", options.merge({:pull => pull}))
21
21
  end
22
22
 
23
23
  def pull_requests(repo, state='open', options={})
24
- get("/api/v2/json/pulls/#{Repository.new(repo)}/#{state}", options)['pulls']
24
+ get("repos/#{Repository.new(repo)}/pulls", options.merge({:state => state}), 3)
25
25
  end
26
26
  alias :pulls :pull_requests
27
27
 
28
28
  def pull_request(repo, number, options={})
29
- get("/api/v2/json/pulls/#{Repository.new(repo)}/#{number}", options)['pull']
29
+ get("repos/#{Repository.new(repo)}/pulls/#{number}", options)
30
30
  end
31
31
  alias :pull :pull_request
32
32
  end
@@ -2,7 +2,8 @@ module Octokit
2
2
  class Client
3
3
  module Repositories
4
4
  def search_repositories(q, options={})
5
- get("/api/v2/json/repos/search/#{q}", options)['repositories']
5
+ # Depreciated
6
+ get("/api/v2/json/repos/search/#{q}", options, 2)['repositories']
6
7
  end
7
8
  alias :search_repos :search_repositories
8
9
 
@@ -54,22 +55,6 @@ module Octokit
54
55
  alias :create_repo :create_repository
55
56
  alias :create :create_repository
56
57
 
57
- def delete_repository(repo, options={})
58
- response = post("/api/v2/json/repos/delete/#{Repository.new(repo)}", options)
59
- if response.respond_to?(:delete_token)
60
- response['delete_token']
61
- else
62
- response
63
- end
64
- end
65
- alias :delete_repo :delete_repository
66
-
67
- def delete_repository!(repo, options={})
68
- delete_token = delete_repository(repo, options)
69
- post("/api/v2/json/repos/delete/#{Repository.new(repo)}", options.merge(:delete_token => delete_token))
70
- end
71
- alias :delete_repo! :delete_repository!
72
-
73
58
  def set_private(repo, options={})
74
59
  update_repository repo, options.merge({ :public => false })
75
60
  end
@@ -107,7 +92,8 @@ module Octokit
107
92
  alias :remove_collab :remove_collaborator
108
93
 
109
94
  def pushable(options={})
110
- get("/api/v2/json/repos/pushable", options)['repositories']
95
+ # There isn't a matching method in V3 of the api
96
+ get("/api/v2/json/repos/pushable", options, 2)['repositories']
111
97
  end
112
98
 
113
99
  def repository_teams(repo, options={})
@@ -141,6 +127,20 @@ module Octokit
141
127
  def branches(repo, options={})
142
128
  get "/repos/#{Repository.new repo}/branches", options, 3
143
129
  end
130
+
131
+ # Get all Issue Events for a given Repository
132
+ #
133
+ # @param repo [String, Repository, Hash] A GitHub repository
134
+ #
135
+ # @return [Array] Array of all Issue Events for this Repository
136
+ # @see http://developer.github.com/v3/issues/events/#list-events-for-a-repository
137
+ # @example Get all Issue Events for Octokit
138
+ # Octokit.repository_issue_events("pengwynn/octokit")
139
+ def repository_issue_events(repo, options={})
140
+ get "/repos/#{Repository.new repo}/issues/events", options, 3
141
+ end
142
+ alias :repo_issue_events :repository_issue_events
143
+
144
144
  end
145
145
  end
146
146
  end
@@ -2,11 +2,12 @@ module Octokit
2
2
  class Client
3
3
  module Users
4
4
  EMAIL_RE = /[\w.!#\$%+-]+@[\w-]+(?:\.[\w-]+)+/
5
+ # Depreciated: V3 of the API does not allow searching users
5
6
  def search_users(search, options={})
6
7
  if search.match(EMAIL_RE)
7
- get("/api/v2/json/user/email/#{search}", options)['user']
8
+ get("/api/v2/json/user/email/#{search}", options, 2)['user']
8
9
  else
9
- get("/api/v2/json/user/search/#{search}", options)['users']
10
+ get("/api/v2/json/user/search/#{search}", options, 2)['users']
10
11
  end
11
12
  end
12
13
 
@@ -42,11 +43,11 @@ module Octokit
42
43
  end
43
44
 
44
45
  def followers(user=login, options={})
45
- get("/api/v2/json/user/show/#{user}/followers", options)['users']
46
+ get("/users/#{user}/followers", options, 3)
46
47
  end
47
48
 
48
49
  def following(user=login, options={})
49
- get("/api/v2/json/user/show/#{user}/following", options)['users']
50
+ get("/users/#{user}/following", options, 3)
50
51
  end
51
52
 
52
53
  def follows?(*args)
@@ -54,43 +55,47 @@ module Octokit
54
55
  user = args.first
55
56
  user ||= login
56
57
  return if user.nil?
57
- following(user).include?(target)
58
+ get("/user/following/#{target}", {}, 3, true, raw=true).status == 204
59
+ rescue Octokit::NotFound
60
+ false
58
61
  end
59
62
 
60
63
  def follow(user, options={})
61
- post("/api/v2/json/user/follow/#{user}", options)['users']
64
+ put("/user/following/#{user}", options, 3, true, raw=true).status == 204
62
65
  end
63
66
 
64
67
  def unfollow(user, options={})
65
- post("/api/v2/json/user/unfollow/#{user}", options)['users']
68
+ delete("/user/following/#{user}", options, 3, true, raw=true).status == 204
66
69
  end
67
70
 
68
71
  def watched(user=login, options={})
69
- get("/api/v2/json/repos/watched/#{user}", options)['repositories']
72
+ get("/users/#{user}/watched", options, 3)
70
73
  end
71
74
 
75
+ # Not yet supported: get a single key, update an existing key
76
+
72
77
  def keys(options={})
73
- get("/api/v2/json/user/keys", options)['public_keys']
78
+ get("/user/keys", options, 3)
74
79
  end
75
80
 
76
81
  def add_key(title, key, options={})
77
- post("/api/v2/json/user/key/add", options.merge({:title => title, :key => key}))['public_keys']
82
+ post("/user/keys", options.merge({:title => title, :key => key}), 3)
78
83
  end
79
84
 
80
85
  def remove_key(id, options={})
81
- post("/api/v2/json/user/key/remove", options.merge({:id => id}))['public_keys']
86
+ delete("/user/keys/#{id}", options, 3, true, raw=true)
82
87
  end
83
88
 
84
89
  def emails(options={})
85
- get("/api/v2/json/user/emails", options)['emails']
90
+ get("/user/emails", options, 3)
86
91
  end
87
92
 
88
93
  def add_email(email, options={})
89
- post("/api/v2/json/user/email/add", options.merge({:email => email}))['emails']
94
+ post("/user/emails", options.merge({:email => email}), 3)
90
95
  end
91
96
 
92
97
  def remove_email(email, options={})
93
- post("/api/v2/json/user/email/remove", options.merge({:email => email}))['emails']
98
+ delete("/user/emails", options.merge({:email => email}), 3, true, raw=true).status == 204
94
99
  end
95
100
  end
96
101
  end
@@ -10,11 +10,13 @@ module Octokit
10
10
  :password,
11
11
  :proxy,
12
12
  :oauth_token,
13
- :user_agent].freeze
13
+ :user_agent,
14
+ :auto_traversal].freeze
14
15
 
15
- DEFAULT_ADAPTER = Faraday.default_adapter
16
- DEFAULT_API_VERSION = 2
17
- DEFAULT_USER_AGENT = "Octokit Ruby Gem #{Octokit::VERSION}".freeze
16
+ DEFAULT_ADAPTER = Faraday.default_adapter
17
+ DEFAULT_API_VERSION = 3
18
+ DEFAULT_USER_AGENT = "Octokit Ruby Gem #{Octokit::VERSION}".freeze
19
+ DEFAULT_AUTO_TRAVERSAL = false
18
20
 
19
21
  attr_accessor(*VALID_OPTIONS_KEYS)
20
22
 
@@ -31,13 +33,14 @@ module Octokit
31
33
  end
32
34
 
33
35
  def reset
34
- self.adapter = DEFAULT_ADAPTER
35
- self.api_version = DEFAULT_API_VERSION
36
- self.login = nil
37
- self.password = nil
38
- self.proxy = nil
39
- self.oauth_token = nil
40
- self.user_agent = DEFAULT_USER_AGENT
36
+ self.adapter = DEFAULT_ADAPTER
37
+ self.api_version = DEFAULT_API_VERSION
38
+ self.login = nil
39
+ self.password = nil
40
+ self.proxy = nil
41
+ self.oauth_token = nil
42
+ self.user_agent = DEFAULT_USER_AGENT
43
+ self.auto_traversal = DEFAULT_AUTO_TRAVERSAL
41
44
  end
42
45
  end
43
46
  end
@@ -6,7 +6,7 @@ module Octokit
6
6
  module Connection
7
7
  private
8
8
 
9
- def connection(authenticate=true, raw=false, version=2, force_urlencoded=false)
9
+ def connection(authenticate=true, raw=false, version=3, force_urlencoded=false)
10
10
  case version
11
11
  when 2
12
12
  url = "https://github.com"
@@ -30,8 +30,8 @@ module Octokit
30
30
  end
31
31
  builder.use Faraday::Response::RaiseOctokitError
32
32
  unless raw
33
- builder.use Faraday::Response::Mashify
34
- builder.use Faraday::Response::ParseJson
33
+ builder.use FaradayMiddleware::Mashify
34
+ builder.use FaradayMiddleware::ParseJson
35
35
  end
36
36
  builder.adapter(adapter)
37
37
  end
@@ -38,7 +38,23 @@ module Octokit
38
38
  end
39
39
  end
40
40
  end
41
- raw ? response : response.body
41
+
42
+ if raw
43
+ response
44
+ elsif auto_traversal && ( next_url = links(response)["next"] )
45
+ response.body + request(method, next_url, options, version, authenticate, raw, force_urlencoded)
46
+ else
47
+ response.body
48
+ end
49
+ end
50
+
51
+ def links(response)
52
+ links = ( response.headers["Link"] || "" ).split(', ').map do |link|
53
+ url, type = link.match(/<(.*?)>; rel="(\w+)"/).captures
54
+ [ type, url ]
55
+ end
56
+
57
+ Hash[ *links.flatten ]
42
58
  end
43
59
  end
44
60
  end
@@ -1,3 +1,3 @@
1
1
  module Octokit
2
- VERSION = "0.6.5".freeze unless defined?(Octokit::VERSION)
2
+ VERSION = "1.0.0".freeze unless defined?(Octokit::VERSION)
3
3
  end
@@ -2,19 +2,20 @@
2
2
  require File.expand_path('../lib/octokit/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
- gem.add_dependency 'addressable', '~> 2.2.6'
6
- gem.add_dependency 'faraday', '~> 0.7.4'
7
- gem.add_dependency 'faraday_middleware', '~> 0.7.0'
8
- gem.add_dependency 'hashie', '~> 1.2.0'
9
- gem.add_dependency 'multi_json', '~> 1.0.2'
10
- gem.add_development_dependency 'json', '~> 1.6'
11
- gem.add_development_dependency 'rake', '~> 0.9'
12
- gem.add_development_dependency 'rspec', '~> 2.6'
13
- gem.add_development_dependency 'simplecov', '~> 0.4'
14
- gem.add_development_dependency 'webmock', '~> 1.7'
15
- gem.add_development_dependency 'yard', '~> 0.7'
5
+ gem.add_dependency 'addressable', '~> 2.2'
6
+ gem.add_dependency 'faraday', '~> 0.7'
7
+ gem.add_dependency 'faraday_middleware', '~> 0.8'
8
+ gem.add_dependency 'hashie', '~> 1.2'
9
+ gem.add_dependency 'multi_json', '~> 1.0'
10
+ gem.add_development_dependency 'json'
11
+ gem.add_development_dependency 'rake'
12
+ gem.add_development_dependency 'rspec', '~> 2.8'
13
+ gem.add_development_dependency 'simplecov'
14
+ gem.add_development_dependency 'webmock'
15
+ gem.add_development_dependency 'yard'
16
+ gem.add_development_dependency 'rdiscount'
16
17
  gem.authors = ["Wynn Netherland", "Adam Stacoviak", "Erik Michaels-Ober"]
17
- gem.description = %q{Simple wrapper for the GitHub API v2}
18
+ gem.description = %q{Simple wrapper for the GitHub API (v2 and v3)}
18
19
  gem.email = ['wynn.netherland@gmail.com', 'adam@stacoviak.com', 'sferik@gmail.com']
19
20
  gem.files = `git ls-files`.split("\n")
20
21
  gem.homepage = 'https://github.com/pengwynn/octokit'
@@ -0,0 +1,7 @@
1
+ {
2
+ "url": "https://api.github.com/repos/sferik/rails_admin/git/blobs/94616fa57520ac8147522c7cf9f03d555595c5ea",
3
+ "content": "UmFpbHNBZG1pbgo9PT09PT09PT09ClJhaWxzQWRtaW4gaXMgYSBSYWlscyBl\nbmdpbmUgdGhhdCBwcm92aWRlcyBhbiBlYXN5LXRvLXVzZSBpbnRlcmZhY2Ug\nZm9yIG1hbmFnaW5nIHlvdXIgZGF0YS4KClJhaWxzQWRtaW4gc3RhcnRlZCBh\ncyBhIHBvcnQgb2YgW01lcmJBZG1pbl0oaHR0cDovL2dpdGh1Yi5jb20vc2Zl\ncmlrL21lcmItYWRtaW4pIHRvIFJhaWxzIDMKYW5kIHdhcyBpbXBsZW1lbnRl\nZCBhcyBhIFtSdWJ5IFN1bW1lciBvZiBDb2RlIHByb2plY3RdKGh0dHA6Ly93\nd3cucnVieXNvYy5vcmcvcHJvamVjdHMpCmJ5IFtCb2dkYW4gR2F6YV0oaHR0\ncDovL2dpdGh1Yi5jb20vaHVycnljYW5lKSB3aXRoIG1lbnRvcnMgW0VyaWsg\nTWljaGFlbHMtT2Jlcl0oaHR0cDovL2dpdGh1Yi5jb20vc2ZlcmlrKSwKW1ll\naHVkYSBLYXR6XShodHRwOi8vZ2l0aHViLmNvbS93eWNhdHMpLApbTHVrZSB2\nYW4gZGVyIEhvZXZlbl0oaHR0cDovL2dpdGh1Yi5jb20vcGx1a2V2ZGgpLCBh\nbmQgW1JlaW4gSGVucmljaHNdKGh0dHA6Ly9naXRodWIuY29tL3JlaW5oKS4K\nCkl0IGN1cnJlbnRseSBvZmZlcnMgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoK\nCiogRGlzcGxheSBkYXRhYmFzZSB0YWJsZXMKKiBDcmVhdGUgbmV3IGRhdGEK\nKiBFYXNpbHkgdXBkYXRlIGRhdGEKKiBTYWZlbHkgZGVsZXRlIGRhdGEKKiBB\ndXRvbWF0aWMgZm9ybSB2YWxpZGF0aW9uCiogU2VhcmNoCiogQXV0aGVudGlj\nYXRpb24gKHZpYSBbRGV2aXNlXShodHRwOi8vZ2l0aHViLmNvbS9wbGF0YWZv\ncm1hdGVjL2RldmlzZSkpCiogVXNlciBhY3Rpb24gaGlzdG9yeQoKU3VwcG9y\ndGVkIE9STXM6CgoqIEFjdGl2ZVJlY29yZAoKX1tJbmZvcm1hdGlvbl0oaHR0\ncHM6Ly9naXRodWIuY29tL3NmZXJpay9yYWlsc19hZG1pbi9pc3N1ZXMvMTA1\nKSBhYm91dCBzdXBwb3J0IGZvciBvdGhlciBPUk1zLl8KCkhlbHAKLS0tLQpJ\nZiB5b3UgaGF2ZSBhIHF1ZXN0aW9uLCB5b3UgY2FuIGFzayB0aGUgW29mZmlj\naWFsIFJhaWxzQWRtaW4gbWFpbGluZyBsaXN0XShodHRwOi8vZ3JvdXBzLmdv\nb2dsZS5jb20vZ3JvdXAvcmFpbHNfYWRtaW4pCm9yIHBpbmcgc2ZlcmlrIG9u\nIElSQyBpbiBbI3JhaWxzYWRtaW4gb24gaXJjLmZyZWVub2RlLm5ldF0oaHR0\ncDovL3dlYmNoYXQuZnJlZW5vZGUubmV0Lz9jaGFubmVscz1yYWlsc2FkbWlu\nKS4KClNjcmVlbnNob3RzCi0tLS0tLS0tLS0tCiFbTGlzdCB2aWV3XShodHRw\nczovL2dpdGh1Yi5jb20vc2ZlcmlrL3JhaWxzX2FkbWluL3Jhdy9tYXN0ZXIv\nc2NyZWVuc2hvdHMvbGlzdC5wbmcgIkxpc3QgdmlldyIpCiFbRWRpdCB2aWV3\nXShodHRwczovL2dpdGh1Yi5jb20vc2ZlcmlrL3JhaWxzX2FkbWluL3Jhdy9t\nYXN0ZXIvc2NyZWVuc2hvdHMvZWRpdC5wbmcgIkVkaXQgdmlldyIpCgpJbnN0\nYWxsYXRpb24KLS0tLS0tLS0tLS0tCkluIHlvdXIgYEdlbWZpbGVgLCBhZGQg\ndGhlIGZvbGxvd2luZyBkZXBlbmRlbmN5OgogICAgZ2VtICdkZXZpc2UnICMg\nRGV2aXNlIG11c3QgYmUgcmVxdWlyZWQgYmVmb3JlIFJhaWxzQWRtaW4KICAg\nIGdlbSAncmFpbHNfYWRtaW4nLCA6Z2l0ID0+ICdnaXQ6Ly9naXRodWIuY29t\nL3NmZXJpay9yYWlsc19hZG1pbi5naXQnClJ1bjoKICAgICQgYnVuZGxlIGlu\nc3RhbGwKQW5kIHRoZW4gcnVuOgogICAgJCByYWlscyBnZW5lcmF0ZSByYWls\nc19hZG1pbjppbnN0YWxsX2FkbWluClRoaXMgdGFzayB3aWxsIGluc3RhbGwg\nUmFpbHNBZG1pbiBhbmQgW0RldmlzZV0oaHR0cDovL2dpdGh1Yi5jb20vcGxh\ndGFmb3JtYXRlYy9kZXZpc2UpIGlmIHlvdQpkb24ndCBhbHJlYWR5IGhhdmUg\naXQgaW5zdGFsbGVkLiBbRGV2aXNlXShodHRwOi8vZ2l0aHViLmNvbS9wbGF0\nYWZvcm1hdGVjL2RldmlzZSkgaXMgc3Ryb25nbHkKcmVjb21tZW5kZWQgdG8g\ncHJvdGVjdCB5b3VyIGRhdGEgZnJvbSBhbm9ueW1vdXMgdXNlcnMuCgpJZiB5\nb3UgcGxhbiB0byB1c2UgRGV2aXNlLCBidXQgd2FudCB0byB1c2UgYSBjdXN0\nb20gbW9kZWwgZm9yIGF1dGhlbnRpY2F0aW9uCihkZWZhdWx0IGlzIFVzZXIp\nIHlvdSBjYW4gcHJvdmlkZSB0aGF0IGFzIGFuIGFyZ3VtZW50IGZvciB0aGUg\naW5zdGFsbGVyLiBGb3IgZXhhbXBsZQp0byBvdmVycmlkZSB0aGUgZGVmYXVs\ndCB3aXRoIGEgTWVtYmVyIG1vZGVsIHJ1bjoKICAgICQgcmFpbHMgZ2VuZXJh\ndGUgcmFpbHNfYWRtaW46aW5zdGFsbF9hZG1pbiBtZW1iZXIKCklmIHlvdSB3\nYW50IHRvIHVzZSB0aGUgQ0tFZGl0b3IsIHlvdSBuZWVkIHRvIFtkb3dubG9h\nZCBpdF0oaHR0cDovL2NrZWRpdG9yLmNvbS9kb3dubG9hZCkgZnJvbSBzb3Vy\nY2UKYW5kIHVucGFjayB0aGUgJ2NrZWRpdG9yJyBmb2xkZXIgaW50byB5b3Vy\nIGRlZmF1bHQgJ3B1YmxpYy9qYXZhc2NyaXB0cycgZm9sZGVyLiBJZiB5b3Un\ncmUgdXNpbmcgYW55Cm5vbi1XaW5kb3dzIHN5c3RlbSwgeW91IGNhbiB0cnkg\ndG8gdXNlIHRoZSBhdXRvbWF0aWMgZG93bmxvYWRlcjoKICAgICQgcmFrZSBh\nZG1pbjpja2VkaXRvcl9kb3dubG9hZAoKV2hlbiBydW5uaW5nIFJhaWxzQWRt\naW4gaW4gcHJvZHVjdGlvbiB0aGUgaW1hZ2VzLCBzdHlsZXNoZWV0cywgYW5k\nIGphdmFzY3JpcHQgYXNzZXRzIG1heSByZXR1cm4gNDA0Cm5vdCBmb3VuZCBl\ncnJvcidzIGRlcGVuZGluZyBvbiB5b3VyIHNlcnZlcnMgc3RhdGljIGFzc2V0\ncyBjb25maWd1cmF0aW9uLiAgVG8gcHJldmVudCB0aGlzIGlzc3VlIHlvdQpj\nYW4gY29weSBhc3NldHMgZGlyZWN0bHkgaW50byB5b3VyIGFwcGxpY2F0aW9u\nIGJ5IHJ1bm5pbmc6CiAgICAkIHJha2UgYWRtaW46Y29weV9hc3NldHMKICAg\nICAgICAKVXNhZ2UKLS0tLS0KU3RhcnQgdGhlIHNlcnZlcjoKICAgICQgcmFp\nbHMgc2VydmVyCllvdSBzaG91bGQgbm93IGJlIGFibGUgdG8gYWRtaW5pc3Rl\nciB5b3VyIHNpdGUgYXQgPGh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hZG1pbj4K\nCkNvbmZpZ3VyYXRpb24KLS0tLS0tLS0tLS0tLQpSYWlsc0FkbWluIHByb3Zp\nZGVzIGl0cyBvdXQgb2YgdGhlIGJveCBhZG1pbmlzdHJhdGl2ZSBpbnRlcmZh\nY2UgYnkgaW5zcGVjdGluZyB5b3VyIGFwcGxpY2F0aW9uJ3MKbW9kZWxzIGFu\nZCBmb2xsb3dpbmcgc29tZSBSYWlscyBjb252ZW50aW9ucy4gRm9yIGEgbW9y\nZSB0YWlsb3JlZCBleHBlcmllbmNlLCBpdCBhbHNvIHByb3ZpZGVzIGEKY29u\nZmlndXJhdGlvbiBEU0wgd2hpY2ggYWxsb3dzIHlvdSB0byBjdXN0b21pemUg\nbWFueSBhc3BlY3RzIG9mIHRoZSBpbnRlcmZhY2UuCgpUaGUgY29uZmlndXJh\ndGlvbiBjb2RlIHNob3VsZCBiZSBwbGFjZWQgaW4gYW4gaW5pdGlhbGl6ZXIg\nZmlsZSwgZm9yIGV4YW1wbGU6CiAgICBjb25maWcvaW5pdGlhbGl6ZXJzL3Jh\naWxzX2FkbWluLnJiCgojIyMgR2VuZXJhbAoKWW91IGNhbiBjdXN0b21pemUg\nYXV0aGVudGljYXRpb24gYnkgcHJvdmlkaW5nIGEgY3VzdG9tIGJsb2NrIGZv\nciBgUmFpbHNBZG1pbi5hdXRoZW50aWNhdGVfd2l0aGAuClRvIGRpc2FibGUg\nYXV0aGVudGljYXRpb24sIHBhc3MgYW4gZW1wdHkgYmxvY2s6CgogICAgUmFp\nbHNBZG1pbi5hdXRoZW50aWNhdGVfd2l0aCB7fQoKWW91IGNhbiBleGNsdWRl\nIG1vZGVscyBmcm9tIFJhaWxzQWRtaW4gYnkgYXBwZW5kaW5nIHRob3NlIG1v\nZGVscyB0byBgZXhjbHVkZWRfbW9kZWxzYDoKCiAgICBSYWlsc0FkbWluLmNv\nbmZpZyBkbyB8Y29uZmlnfAogICAgICBjb25maWcuZXhjbHVkZWRfbW9kZWxz\nIDw8IENsYXNzTmFtZQogICAgZW5kCgojIyMgTmF2aWdhdGlvbiAjIyMKCiog\naGlkaW5nIGEgbW9kZWwKKiBzZXR0aW5nIHRoZSBtb2RlbCdzIGxhYmVsCiog\nY29uZmlndXJpbmcgdGhlIG51bWJlciBvZiB2aXNpYmxlIHRhYnMKCioqSGlk\naW5nIGEgbW9kZWwqKgoKWW91IGNhbiBoaWRlIGEgbW9kZWwgZnJvbSB0aGUg\ndG9wIG5hdmlnYXRpb24gYnkgbWFya2luZyBpdHMgYHZpc2libGVgIG9wdGlv\nbgphcyBmYWxzZSB3aXRoaW4gdGhlIG1vZGVsJ3MgbmF2aWdhdGlvbiBjb25m\naWd1cmF0aW9uIHNlY3Rpb246CgpCeSBwYXNzaW5nIHRoZSB2YWx1ZSBhcyBh\nbiBhcmd1bWVudDoKCiAgICBSYWlsc0FkbWluLmNvbmZpZyBkbyB8Y29uZmln\nfAogICAgICBjb25maWcubW9kZWwgVGVhbSBkbwogICAgICAgIG5hdmlnYXRp\nb24gZG8KICAgICAgICAgIHZpc2libGUgZmFsc2UKICAgICAgICBlbmQKICAg\nICAgZW5kCiAgICBlbmQKCk9yIGJ5IHBhc3NpbmcgYSBibG9jayB0aGF0IHdp\nbGwgYmUgbGF6eSBldmFsdWF0ZWQgZWFjaCB0aW1lIHRoZSBvcHRpb24gaXMg\ncmVhZDoKCiAgICBSYWlsc0FkbWluLmNvbmZpZyBkbyB8Y29uZmlnfAogICAg\nICBjb25maWcubW9kZWwgVGVhbSBkbwogICAgICAgIG5hdmlnYXRpb24gZG8K\nICAgICAgICAgIHZpc2libGUgeyBmYWxzZSB9CiAgICAgICAgZW5kCiAgICAg\nIGVuZAogICAgZW5kCgpUaGVzZSB0d28gZXhhbXBsZXMgYWxzbyB3b3JrIGFz\nIGEgZ2VuZXJpYyBleGFtcGxlIG9mIGhvdyBtb3N0IG9mIHRoZQpjb25maWd1\ncmF0aW9uIG9wdGlvbnMgZnVuY3Rpb24gd2l0aGluIFJhaWxzQWRtaW4uIFlv\ndSBjYW4gcGFzcyBhIHZhbHVlIGFzIGFuCmFyZ3VtZW50IGBvcHRpb25fbmFt\nZSB2YWx1ZWAsIG9yIHlvdSBjYW4gcGFzcyBpbiBhIGJsb2NrIHdoaWNoIHdp\nbGwgYmUKZXZhbHVhdGVkIGVhY2ggdGltZSB0aGUgb3B0aW9uIGlzIHJlYWQu\nIE5vdGFibGUgaXMgdGhhdCBib29sZWFuIG9wdGlvbnMnIHJlYWRlcgphY2Nl\nc3NvcnMgd2lsbCBiZSBhcHBlbmRlZCB3aXRoID8gd2hlcmVhcyB0aGUgd3Jp\ndGVycyB3aWxsIG5vdCBiZS4gVGhhdCBpcywgaWYKeW91IHdhbnQgdG8gZ2V0\nIHRoZSBUZWFtIG1vZGVsJ3MgdmlzaWJpbGl0eSBpbiBuYXZpZ2F0aW9uLCB5\nb3UgdXNlCmBSYWlsc0FkbWluLmNvbmZpZyhUZWFtKS5uYXZpZ2F0aW9uLnZp\nc2libGU/YC4KCkJhY2sgdG8gbmF2aWdhdGlvbiBjb25maWd1cmF0aW9uIC0g\ndGhlcmUgaXMgYWxzbyBhbiBhbGlhcyBtZXRob2QgdGhhdCBjYW4gYmUgdXNl\nZDoKCiAgICBSYWlsc0FkbWluLmNvbmZpZyBkbyB8Y29uZmlnfAogICAgICBj\nb25maWcubW9kZWwgVGVhbSBkbwogICAgICAgIGhpZGVfZnJvbV9uYXZpZ2F0\naW9uCiAgICAgIGVuZAogICAgZW5kCgpBbmQgYWxzbyBhIHJldmVyc2UgYWxp\nYXMgbWV0aG9kIHRvIG1ha2UgaXQgdmlzaWJsZSBhZ2FpbjoKCiAgICBSYWls\nc0FkbWluLmNvbmZpZyBkbyB8Y29uZmlnfAogICAgICBjb25maWcubW9kZWwg\nVGVhbSBkbwogICAgICAgIHNob3dfaW5fbmF2aWdhdGlvbgogICAgICBlbmQK\nICAgIGVuZAoKQm90aCBhbHNvIGFjY2VwdCBhIGJsb2NrOgoKICAgIFJhaWxz\nQWRtaW4uY29uZmlnIGRvIHxjb25maWd8CiAgICAgIGNvbmZpZy5tb2RlbCBU\nZWFtIGRvCiAgICAgICAgIyBIaWRlIFRlYW0gZnJvbSBuYXZpZ2F0aW9uIG9u\nIFN1bmRheXMKICAgICAgICBoaWRlX2Zyb21fbmF2aWdhdGlvbiBkbwogICAg\nICAgICAgVGltZS5ub3cud2RheSA9PSAwCiAgICAgICAgZW5kCiAgICAgIGVu\nZAogICAgZW5kCgoqTk9URSogLSBUaGUgaGlkZV9mcm9tX25hdmlnYXRpb24g\nbWV0aG9kIHdhcyBvcmlnaW5hbGx5IGltcGxlbWVudGVkIGFzCiBoaWRlX2lu\nX25hdmlnYXRpb24gYnV0IHRoYXQgbmFtZSBpcyBub3cgZGVwcmVjYXRlZCAt\nIHlvdSBzaG91bGQKIGNoYW5nZSB5b3VyIGNvZGUgdG8gdXNlIGhpZGVfZnJv\nbV9uYXZpZ2F0aW9uLgoKKipTZXR0aW5nIHRoZSBtb2RlbCdzIGxhYmVsKioK\nCklmIHlvdSBuZWVkIHRvIGN1c3RvbWl6ZSB0aGUgbGFiZWwgb2YgdGhlIG1v\nZGVsIHdpdGhpbiB0aGUgbmF2aWdhdGlvbiB0YWIsIHVzZToKCiAgICBSYWls\nc0FkbWluLmNvbmZpZyBkbyB8Y29uZmlnfAogICAgICBjb25maWcubW9kZWwg\nVGVhbSBkbwogICAgICAgIG5hdmlnYXRpb24gZG8KICAgICAgICAgIGxhYmVs\nICJMaXN0IG9mIHRlYW1zIgogICAgICAgIGVuZAogICAgICBlbmQKICAgIGVu\nZAoKUmVtZW1iZXIsIHlvdSBjYW4gYWxzbyBwYXNzIHRoZSB2YWx1ZSBhcyBh\nbiBhcmd1bWVudCBvciBhcyBhIGJsb2NrIGFzIHdpdGggdGhlCmJlZm9yZSBt\nZW50aW9uZWQgdmlzaWJpbGl0eSBvcHRpb25zLiBCZXNpZGVzIHRoYXQsIHRo\nZSBsYWJlbCBhbHNvIGhhcyBhCnNob3J0aGFuZCBzeW50YXg6CgogICAgUmFp\nbHNBZG1pbi5jb25maWcgZG8gfGNvbmZpZ3wKICAgICAgY29uZmlnLm1vZGVs\nIFRlYW0gZG8KICAgICAgICBsYWJlbF9mb3JfbmF2aWdhdGlvbiAiTGlzdCBv\nZiB0ZWFtcyIKICAgICAgZW5kCiAgICBlbmQKCndoaWNoIGFsbG93cyBib3Ro\nIGZvcm1zIG9mIGNvbmZpZ3VyYXRpb24gdmFsdWUgcGFzc2luZyBhcyB3ZWxs\nLgoKKipDb25maWd1cmluZyB0aGUgbnVtYmVyIG9mIHZpc2libGUgdGFicyoq\nCgpZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgbnVtYmVyIG9mIHRhYnMgdmlzaWJs\nZSBpbiB0aGUgdG9wIG5hdmlnYXRpb246CgogICAgUmFpbHNBZG1pbi5jb25m\naWcgZG8gfGNvbmZpZ3wKICAgICAgY29uZmlnLm5hdmlnYXRpb24ubWF4X3Zp\nc2libGVfdGFicyAzCiAgICBlbmQKCkxpbmtzIHRvIHRoZSByZXN0IG9mIHRo\nZSBtb2RlbHMgd2lsbCBiZSByZW5kZXJlZCBpbiBhIGRyb3AgZG93biBtZW51\nIG5leHQgdG8gdGhlCnRhYnMuIEV2ZW4gdGhvdWdoIHRoaXMgb3B0aW9uIGlz\nIG5vdCBtb2RlbCBzcGVjaWZpYywgaXQgc2hhcmVzIHRoZSBzYW1lCnNlbWFu\ndGljcyBhcyB0aGUgZWFybGllciBvbmVzIC0geW91IGNhbiBhbHNvIHBhc3Mg\naW4gYSBibG9jayBvciBwYXNzIHRoZSB2YWx1ZQphcyBhbiBhcmd1bWVudCBi\neSBvbWl0dGluZyB0aGUgZXF1YWxzIHNpZ24uCgojIyMgTGlzdCB2aWV3Cgoq\nIE51bWJlciBvZiBpdGVtcyBwZXIgcGFnZQoqIE51bWJlciBvZiBpdGVtcyBw\nZXIgcGFnZSBwZXIgbW9kZWwKKiBGaWVsZHMKICAqIFZpc2liaWxpdHkgYW5k\nIG9yZGVyaW5nCiAgKiBMYWJlbAogICogT3V0cHV0IGZvcm1hdHRpbmcKICAq\nIFNvcnRhYmlsaXR5CiAgKiBDb2x1bW4gQ1NTIGNsYXNzCiAgKiBDb2x1bW4g\nd2lkdGgKICAqIFRoZSBvYmplY3RfbGFiZWwgbWV0aG9kCgoqKk51bWJlciBv\nZiBpdGVtcyBwZXIgcGFnZSoqCgpZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgZGVm\nYXVsdCBudW1iZXIgb2Ygcm93cyByZW5kZXJlZCBwZXIgcGFnZToKCiAgICBS\nYWlsc0FkbWluLmNvbmZpZyBkbyB8Y29uZmlnfAogICAgICBjb25maWcubGlz\ndC5kZWZhdWx0X2l0ZW1zX3Blcl9wYWdlID0gNTAKICAgIGVuZAoKKipOdW1i\nZXIgb2YgaXRlbXMgcGVyIHBhZ2UgcGVyIG1vZGVsKioKCllvdSBjYW4gYWxz\nbyBjb25maWd1cmUgaXQgcGVyIG1vZGVsOgoKICAgIFJhaWxzQWRtaW4uY29u\nZmlnIGRvIHxjb25maWd8CiAgICAgIGNvbmZpZy5tb2RlbCBUZWFtIGRvCiAg\nICAgICAgbGlzdCBkbwogICAgICAgICAgaXRlbXNfcGVyX3BhZ2UgMTAwCiAg\nICAgICAgZW5kCiAgICAgIGVuZAogICAgZW5kCgoqKkZpZWxkcyAtIFZpc2li\naWxpdHkgYW5kIG9yZGVyaW5nKioKCkJ5IGRlZmF1bHQgYWxsIGZpZWxkcyBh\ncmUgdmlzaWJsZSwgYnV0IHRoZXkgYXJlIG5vdCBwcmVzZW50ZWQgaW4gYW55\nIHBhcnRpY3VsYXIKb3JkZXIuIElmIHlvdSBzcGVjaWZpY2FsbHkgZGVjbGFy\nZSBmaWVsZHMsIG9ubHkgZGVmaW5lZCBmaWVsZHMgd2lsbCBiZSB2aXNpYmxl\nCmFuZCB0aGV5IHdpbGwgYmUgcHJlc2VudGVkIGluIHRoZSBvcmRlciBkZWZp\nbmVkOgoKICAgIFJhaWxzQWRtaW4uY29uZmlnIGRvIHxjb25maWd8CiAgICAg\nIGNvbmZpZy5tb2RlbCBUZWFtIGRvCiAgICAgICAgbGlzdCBkbwogICAgICAg\nICAgZmllbGQgOm5hbWUKICAgICAgICAgIGZpZWxkIDpjcmVhdGVkX2F0CiAg\nICAgICAgZW5kCiAgICAgIGVuZAogICAgZW5kCgpUaGlzIHdvdWxkIHNob3cg\nb25seSAibmFtZSIgYW5kICJjcmVhdGVkIGF0IiBjb2x1bW5zIGluIHRoZSBs\naXN0IHZpZXcuCgpJZiB5b3UgbmVlZCB0byBoaWRlIGZpZWxkcyBiYXNlZCBv\nbiBzb21lIGxvZ2ljIG9uIHJ1bnRpbWUgKGZvciBpbnN0YW5jZQphdXRob3Jp\nemF0aW9uIHRvIHZpZXcgZmllbGQpIHlvdSBjYW4gcGFzcyBhIGJsb2NrIGZv\nciB0aGUgYHZpc2libGVgIG9wdGlvbgooaW5jbHVkaW5nIGl0cyBgaGlkZWAg\nYW5kIGBzaG93YCBhY2Nlc3NvcnMpOgoKICAgIFJhaWxzQWRtaW4uY29uZmln\nIGRvIHxjb25maWd8CiAgICAgIGNvbmZpZy5tb2RlbCBUZWFtIGRvCiAgICAg\nICAgbGlzdCBkbwogICAgICAgICAgZmllbGQgOm5hbWUKICAgICAgICAgIGZp\nZWxkIDpjcmVhdGVkX2F0CiAgICAgICAgICBmaWVsZCA6cmV2ZW51ZSBkbwog\nICAgICAgICAgICB2aXNpYmxlIGRvCiAgICAgICAgICAgICAgY3VycmVudF91\nc2VyLnJvbGVzLmluY2x1ZGU/KDphY2NvdW50aW5nKSAjIG1ldGFjb2RlCiAg\nICAgICAgICAgIGVuZAogICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICAg\nIGVuZAogICAgZW5kCgpOb3RlIHRoYXQgYWJvdmUgZXhhbXBsZSdzIGF1dGhv\ncml6YXRpb24gY29uZGl0aW9uYWwgaXMgbm90IHJ1bm5hYmxlIGNvZGUsIGp1\nc3QKYW4gaW1hZ2luYXJ5IGV4YW1wbGUuIFlvdSBuZWVkIHRvIHByb3ZpZGUg\nUmFpbHNBZG1pbiB3aXRoIHlvdXIgb3duCmF1dGhvcml6YXRpb24gc2NoZW1l\nIGZvciB3aGljaCB5b3UgY2FuIGZpbmQgYSBndWlkZSBhdCB0aGUgZW5kIG9m\nIHRoaXMgZmlsZS4KCioqRmllbGRzIC0gTGFiZWwqKgoKVGhlIGhlYWRlciBv\nZiBhIGxpc3QgdmlldyBjb2x1bW4gY2FuIGJlIGNoYW5nZWQgd2l0aCB0aGUg\nZmFtaWxpYXIgbGFiZWwgbWV0aG9kOgoKICAgIFJhaWxzQWRtaW4uY29uZmln\nIGRvIHxjb25maWd8CiAgICAgIGNvbmZpZy5tb2RlbCBUZWFtIGRvCiAgICAg\nICAgbGlzdCBkbwogICAgICAgICAgZmllbGQgOm5hbWUgZG8KICAgICAgICAg\nICAgbGFiZWwgIlRpdGxlIgogICAgICAgICAgZW5kCiAgICAgICAgICBmaWVs\nZCA6Y3JlYXRlZF9hdCBkbwogICAgICAgICAgICBsYWJlbCAiQ3JlYXRlZCBv\nbiIKICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgICBlbmQKICAgIGVu\nZAoKQXMgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGUgdGhpcyB3b3VsZCBzaG93\nIG9ubHkgY29sdW1ucyBmb3IgZmllbGRzICJuYW1lIiBhbmQKImNyZWF0ZWQg\nYXQiIGFuZCB0aGVpciBoZWFkZXJzIHdvdWxkIGhhdmUgYmVlbiByZW5hbWVk\nIHRvICJUaXRsZSIgYW5kCiJDcmVhdGVkIG9uIi4KCioqRmllbGRzIC0gT3V0\ncHV0IGZvcm1hdHRpbmcqKgoKVGhlIGZpZWxkJ3Mgb3V0cHV0IGNhbiBiZSBt\nb2RpZmllZDoKCiAgICBSYWlsc0FkbWluLmNvbmZpZyBkbyB8Y29uZmlnfAog\nICAgICBjb25maWcubW9kZWwgVGVhbSBkbwogICAgICAgIGxpc3QgZG8KICAg\nICAgICAgIGZpZWxkIDpuYW1lIGRvCiAgICAgICAgICAgIGZvcm1hdHRlZF92\nYWx1ZSBkbwogICAgICAgICAgICAgIHZhbHVlLnRvX3MudXBjYXNlCiAgICAg\nICAgICAgIGVuZAogICAgICAgICAgZW5kCiAgICAgICAgICBmaWVsZCA6Y3Jl\nYXRlZF9hdAogICAgICAgIGVuZAogICAgICBlbmQKICAgIGVuZAoKVGhpcyB3\nb3VsZCByZW5kZXIgYWxsIHRoZSB0ZWFtcycgbmFtZXMgdXBwZXJjYXNlZC4K\nClRoZSBmaWVsZCBkZWNsYXJhdGlvbnMgYWxzbyBoYXZlIGFjY2VzcyB0byBh\nIGJpbmRpbmdzIGhhc2ggd2hpY2ggY29udGFpbnMgdGhlCmN1cnJlbnQgcmVj\nb3JkIGluc3RhbmNlIGluIGtleSA6b2JqZWN0IGFuZCB0aGUgdmlldyBpbnN0\nYW5jZSBpbiBrZXkgOnZpZXcuClZpYSA6b2JqZWN0IHdlIGNhbiBhY2Nlc3Mg\nb3RoZXIgY29sdW1ucycgdmFsdWVzIGFuZCB2aWEgOnZpZXcgd2UgY2FuIGFj\nY2VzcyBvdXIKYXBwbGljYXRpb24ncyB2aWV3IGhlbHBlcnM6CgogICAgUmFp\nbHNBZG1pbi5jb25maWcgZG8gfGNvbmZpZ3wKICAgICAgY29uZmlnLm1vZGVs\nIFRlYW0gZG8KICAgICAgICBsaXN0IGRvCiAgICAgICAgICBmaWVsZCA6bmFt\nZSBkbwogICAgICAgICAgICBmb3JtYXR0ZWRfdmFsdWUgZG8KICAgICAgICAg\nICAgICBiaW5kaW5nc1s6dmlld10udGFnKDppbWcsIHsgOnNyYyA9PiBiaW5k\naW5nc1s6b2JqZWN0XS5sb2dvX3VybCB9KSA8PCB2YWx1ZQogICAgICAgICAg\nICBlbmQKICAgICAgICAgIGVuZAogICAgICAgICAgZmllbGQgOmNyZWF0ZWRf\nYXQKICAgICAgICBlbmQKICAgICAgZW5kCiAgICBlbmQKClRoaXMgd291bGQg\nb3V0cHV0IHRoZSBuYW1lIGNvbHVtbiBwcmVwZW5kZWQgd2l0aCB0ZWFtJ3Mg\nbG9nbyB1c2luZyB0aGUgYHRhZ2AKdmlldyBoZWxwZXIuIFRoaXMgZXhhbXBs\nZSB1c2VzIGB2YWx1ZWAgbWV0aG9kIHRvIGFjY2VzcyB0aGUgbmFtZSBmaWVs\nZCdzIHZhbHVlLApidXQgdGhhdCBjb3VsZCBiZSB3cml0dGVuIG1vcmUgdmVy\nYm9zZWx5IGFzIGBiaW5kaW5nc1s6b2JqZWN0XS5uYW1lYC4KCkZpZWxkcyBv\nZiBkaWZmZXJlbnQgZGF0ZSB0eXBlcyAoZGF0ZSwgZGF0ZXRpbWUsIHRpbWUs\nIHRpbWVzdGFtcCkgaGF2ZSB0d28gZXh0cmEKb3B0aW9ucyB0byBzZXQgdGhl\nIHRpbWUgZm9ybWF0dGluZzoKCiAgICBSYWlsc0FkbWluLmNvbmZpZyBkbyB8\nY29uZmlnfAogICAgICBjb25maWcubW9kZWwgVGVhbSBkbwogICAgICAgIGxp\nc3QgZG8KICAgICAgICAgIGZpZWxkIDpuYW1lCiAgICAgICAgICBmaWVsZCA6\nY3JlYXRlZF9hdCBkbwogICAgICAgICAgICBkYXRlX2Zvcm1hdCA6c2hvcnQK\nICAgICAgICAgIGVuZAogICAgICAgICAgZmllbGQgOnVwZGF0ZWRfYXQgZG8K\nICAgICAgICAgICAgc3RyZnRpbWVfZm9ybWF0ICIlWS0lbS0lZCIKICAgICAg\nICAgIGVuZAogICAgICAgIGVuZAogICAgICBlbmQKICAgIGVuZAoKVGhpcyB3\nb3VsZCByZW5kZXIgYWxsIHRoZSB0ZWFtcycgImNyZWF0ZWQgYXQiIGRhdGVz\nIGluIHRoZSBzaG9ydCBmb3JtYXQgb2YgeW91cgphcHBsaWNhdGlvbidzIGxv\nY2FsZSBhbmQgInVwZGF0ZWQgYXQiIGRhdGVzIGluIGZvcm1hdCBZWVlZLU1N\nLURELiBJZiBib3RoCm9wdGlvbnMgYXJlIGRlZmluZWQgZm9yIGEgc2luZ2xl\nIGZpZWxkLCBgc3RyZnRpbWVfZm9ybWF0YCBoYXMgcHJlY2VkZW5jZSBvdmVy\nCmBkYXRlX2Zvcm1hdGAgb3B0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBh\nYm91dCBsb2NhbGl6aW5nIFJhaWxzIHNlZQpbUmFpbHMgSW50ZXJuYXRpb25h\nbGl6YXRpb24gQVBJXShodHRwOi8vZWRnZWd1aWRlcy5ydWJ5b25yYWlscy5v\ncmcvaTE4bi5odG1sI2FkZGluZy1kYXRlLXRpbWUtZm9ybWF0cykKYW5kIFtS\nYWlscyBJMThuIHJlcG9zaXRvcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9zdmVu\nZnVjaHMvcmFpbHMtaTE4bi90cmVlL21hc3Rlci9yYWlscy9sb2NhbGUpLgoK\nKipGaWVsZHMgLSBTb3J0YWJpbGl0eSoqCgpZb3UgY2FuIG1ha2UgYSBjb2x1\nbW4gbm9uLXNvcnRhYmxlIGJ5IHNldHRpbmcgdGhlIHNvcnRhYmxlIG9wdGlv\nbiB0byBmYWxzZToKCiAgICBSYWlsc0FkbWluLmNvbmZpZyBkbyB8Y29uZmln\nfAogICAgICBjb25maWcubW9kZWwgVGVhbSBkbwogICAgICAgIGxpc3QgZG8K\nICAgICAgICAgIGZpZWxkIDpuYW1lCiAgICAgICAgICBmaWVsZCA6Y3JlYXRl\nZF9hdCBkbwogICAgICAgICAgICBzb3J0YWJsZSBmYWxzZQogICAgICAgICAg\nZW5kCiAgICAgICAgZW5kCiAgICAgIGVuZAogICAgZW5kCgoqKkZpZWxkcyAt\nIENvbHVtbiBDU1MgY2xhc3MqKgoKQnkgZGVmYXVsdCBlYWNoIGNvbHVtbiBo\nYXMgYSBDU1MgY2xhc3Mgc2V0IGFjY29yZGluZyB0byBmaWVsZCdzIGRhdGEg\ndHlwZS4gWW91CmNhbiBjdXN0b21pemUgdGhpcyBieToKCiAgICBSYWlsc0Fk\nbWluLmNvbmZpZyBkbyB8Y29uZmlnfAogICAgICBjb25maWcubW9kZWwgVGVh\nbSBkbwogICAgICAgIGxpc3QgZG8KICAgICAgICAgIGZpZWxkIDpuYW1lCiAg\nICAgICAgICBmaWVsZCA6Y3JlYXRlZF9hdCBkbwogICAgICAgICAgICBjc3Nf\nY2xhc3MgImN1c3RvbUNsYXNzIgogICAgICAgICAgZW5kCiAgICAgICAgZW5k\nCiAgICAgIGVuZAogICAgZW5kCgpUaGlzIHdvdWxkIHJlbmRlciB0aGUgImNy\nZWF0ZWQgYXQiIGZpZWxkJ3MgaGVhZGVyIGFuZCBib2R5IGNvbHVtbnMgd2l0\naCBhIENTUyBjbGFzcyBuYW1lZAoiY3VzdG9tQ2xhc3MiLgoKKipGaWVsZHMg\nLSBDb2x1bW4gd2lkdGgqKgoKQnkgZGVmYXVsdCBjb2x1bW5zJyB3aWR0aHMg\nYXJlIGNhbGN1bGF0ZWQgZnJvbSBjZXJ0YWluIHByZS1kZWZpbmVkLApkYXRh\nLXR5cGUtc3BlY2lmaWMgcGl4ZWwgdmFsdWVzLiBJZiB5b3Ugd2FudCB0byBl\nbnN1cmUgYSBtaW5pbXVtIHdpZHRoIGZvciBhCmNvbHVtbiwgeW91IGNhbjoK\nCiAgICBSYWlsc0FkbWluLmNvbmZpZyBkbyB8Y29uZmlnfAogICAgICBjb25m\naWcubW9kZWwgVGVhbSBkbwogICAgICAgIGxpc3QgZG8KICAgICAgICAgIGZp\nZWxkIDpuYW1lIGRvCiAgICAgICAgICAgIGNvbHVtbl93aWR0aCAyMDAKICAg\nICAgICAgIGVuZAogICAgICAgICAgZmllbGQgOmNyZWF0ZWRfYXQKICAgICAg\nICBlbmQKICAgICAgZW5kCiAgICBlbmQKCioqRmllbGRzIC0gVGhlIG9iamVj\ndF9sYWJlbCBtZXRob2QqKgoKTGlzdCBzZWN0aW9uIGhhcyBhIGNvbmZpZ3Vy\nYXRpb24gb3B0aW9uIGBvYmplY3RfbGFiZWxgIHdoaWNoIGNvbmZpZ3VyZXMK\ndGhlIHRpdGxlIG9mIGEgc2luZ2xlIGRhdGFiYXNlIHJlY29yZC4KCkJ5IGRl\nZmF1bHQgaXQgcXVlcmllcyBpZiB0aGUgcmVjb3JkIGluIHF1ZXN0aW9uIGhh\ncyBjb2x1bW5zIG5hbWVkICJuYW1lIiBvcgoidGl0bGUiLiBJZiBuZWl0aGVy\nIGlzIGZvdW5kIGl0IHJldHVybnMgdGhlIG1vZGVsJ3MgY2xhc3NuYW1lIGFw\ncGVuZGVkIHdpdGggaXRzCmRhdGFiYXNlIGlkZW50aWZpZXIuCgpUaGlzIHZh\nbHVlIGlzIHVzZWQgaW4gYSBudW1iZXIgb2YgcGxhY2VzIGluIFJhaWxzQWRt\naW4gLSBmb3IgaW5zdGFuY2UgYXMgdGhlCm91dHB1dCBvZiBiZWxvbmdzIHRv\nIGFzc29jaWF0aW9ucyBpbiB0aGUgbGlzdGluZyB2aWV3cyBvZiByZWxhdGVk\nIG1vZGVscywgYXMKdGhlIG9wdGlvbiBsYWJlbHMgb2YgdGhlIHJlbGF0aW9u\nYWwgZmllbGRzJyBpbnB1dCB3aWRnZXRzIGluIHRoZSBlZGl0IHZpZXdzIG9m\nCnJlbGF0ZWQgbW9kZWxzIGFuZCBhcyBwYXJ0IG9mIHRoZSBhdWRpdCBpbmZv\ncm1hdGlvbiBzdG9yZWQgaW4gdGhlIGhpc3RvcnkKcmVjb3JkcyAtIHNvIGtl\nZXAgaW4gbWluZCB0aGF0IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaGFz\nIHdpZGVzcHJlYWQKZWZmZWN0cy4KCiAgICBSYWlsc0FkbWluLmNvbmZpZyBk\nbyB8Y29uZmlnfAogICAgICBjb25maWcubW9kZWwgVGVhbSBkbwogICAgICAg\nIGxpc3QgZG8KICAgICAgICAgIG9iamVjdF9sYWJlbCBkbwogICAgICAgICAg\nICAiI3tiaW5kaW5nc1s6b2JqZWN0XS5uYW1lfSAtICN7YmluZGluZ3NbOm9i\namVjdF0ubGVhZ3VlLm5hbWV9IgogICAgICAgICAgZW5kCiAgICAgICAgZW5k\nCiAgICAgIGVuZAogICAgZW5kCgpUaGlzIHdvdWxkIG91dHB1dCAiVGVhbSdz\nIG5hbWUgLSBUZWFtJ3MgbGVhZ3VlJ3MgbmFtZSIgaW4gYWxsIHRoZSBwbGFj\nZXMKbWVudGlvbmVkIGluIHBhcmFncmFwaCBhYm92ZSBleGFtcGxlLgoKIyMj\nIENyZWF0ZSBhbmQgdXBkYXRlIHZpZXdzCgoqIEZpZWxkIGdyb3VwaW5ncwog\nICogVmlzaWJpbGl0eQogICogTGFiZWxzCiAgKiBTeW50YXgKKiBGaWVsZHMK\nICAqIFJlbmRlcmluZwogICogT3ZlcnJpZGluZyBmaWVsZCB0eXBlCiAgKiBB\ndmFpbGFibGUgZmllbGQgdHlwZXMKICAqIENyZWF0aW5nIGEgY3VzdG9tIGZp\nZWxkIHR5cGUKICAqIENyZWF0aW5nIGEgY3VzdG9tIGZpZWxkIGZhY3RvcnkK\nCioqRmllbGQgZ3JvdXBpbmdzKioKCkJ5IGRlZmF1bHQgUmFpbHNBZG1pbiBn\ncm91cHMgZmllbGRzIGluIHRoZSBlZGl0IHZpZXdzIChjcmVhdGUgYW5kIHVw\nZGF0ZSB2aWV3cykKYnkgaW5jbHVkaW5nIGFsbCBkYXRhYmFzZSBjb2x1bW5z\nIGFuZCBiZWxvbmdzIHRvIGFzc29jaWF0aW9ucyB0byAiQmFzaWMgaW5mbyIK\nZ3JvdXAgd2hpY2ggaXMgZGlzcGxheWVkIG9uIHRvcCBvZiBmb3JtLiBCZWxv\ndyB0aGF0IGFyZSBkaXNwbGF5ZWQgYWxsIHRoZSBvdGhlcgphc3NvY2lhdGlv\nbnMgYSBtb2RlbCBoYXMsIG9uZSBncm91cCBwZXIgYXNzb2NpYXRpb24uCgpU\naGUgY29uZmlndXJhdGlvbiBhY2Nlc3NvcnMgYXJlIGBlZGl0YCwgYGNyZWF0\nZWAgYW5kIGB1cGRhdGVgLiBGaXJzdCBvbmUgaXMgYQpiYXRjaCBhY2Nlc3Nv\nciB3aGljaCBjb25maWd1cmVzIGJvdGggY3JlYXRlIGFuZCB1cGRhdGUgdmll\nd3MuIEZvciBjb25zaXN0ZW5jeSwKdGhlc2UgZXhhbXBsZXMgb25seSBpbmNs\ndWRlIHRoZSBiYXRjaCBhY2Nlc3NvciBgZWRpdGAsIGJ1dCBpZiB5b3UgbmVl\nZCBkaWZmZXJpbmcKY3JlYXRlIGFuZCB1cGRhdGUgdmlld3MganVzdCByZXBs\nYWNlIGBlZGl0YCB3aXRoIGBjcmVhdGVgIG9yIGB1cGRhdGVgLgoKKipGaWVs\nZCBncm91cGluZ3MgLSB2aXNpYmlsaXR5KioKCkZpZWxkIGdyb3VwcyBjYW4g\nYmUgaGlkZGVuOgoKICAgIFJhaWxzQWRtaW4uY29uZmlnIGRvIHxjb25maWd8\nCiAgICAgIGNvbmZpZy5tb2RlbCBUZWFtIGRvCiAgICAgICAgZWRpdCBkbwog\nICAgICAgICAgZ3JvdXAgOmRlZmF1bHQgZG8KICAgICAgICAgICAgaGlkZQog\nICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICAgIGVuZAogICAgZW5kCgpU\naGlzIHdvdWxkIGhpZGUgdGhlICJCYXNpYyBpbmZvIiBncm91cCB3aGljaCBp\ncyBhY2Nlc3NlZCBieSB0aGUgc3ltYm9sIDpkZWZhdWx0LgpBc3NvY2lhdGlv\nbnMnIGdyb3VwcyBjYW4gYmUgYWNjZXNzZWQgYnkgdGhlIG5hbWUgb2YgdGhl\nIGFzc29jaWF0aW9uLCBzdWNoIGFzCjpmYW5zIG9yIDpwbGF5ZXJzLiBUaGUg\naGlkZSBtZXRob2QgaXMganVzdCBhIHNob3J0Y3V0IGZvciB0aGUgYWN0dWFs\nIGB2aXNpYmxlYApvcHRpb24gd2hpY2ggd2FzIG1lbnRpb25lZCBpbiB0aGUg\nYmVnaW5uaW5nIG9mIHRoZSBuYXZpZ2F0aW9uIHNlY3Rpb24uCgoqKkZpZWxk\nIGdyb3VwaW5ncyAtIGxhYmVscyoqCgpGaWVsZCBncm91cHMgY2FuIGJlIHJl\nbmFtZWQ6CgogICAgUmFpbHNBZG1pbi5jb25maWcgZG8gfGNvbmZpZ3wKICAg\nICAgY29uZmlnLm1vZGVsIFRlYW0gZG8KICAgICAgICBlZGl0IGRvCiAgICAg\nICAgICBncm91cCA6ZGVmYXVsdCBkbwogICAgICAgICAgICBsYWJlbCAiVGVh\nbSBpbmZvcm1hdGlvbiIKICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAg\nICBlbmQKICAgIGVuZAoKVGhpcyB3b3VsZCByZW5kZXIgIlRlYW0gaW5mb3Jt\nYXRpb24iIGluc3RlYWQgb2YgIkJhc2ljIGluZm8iIGFzIHRoZSBncm91cHMg\nbGFiZWwuCgoqKkZpZWxkIGdyb3VwaW5ncyAtIHN5bnRheCoqCgpBcyBpbiB0\naGUgbGlzdCB2aWV3LCB0aGUgZWRpdCB2aWV3cycgY29uZmlndXJhdGlvbiBi\nbG9ja3MgY2FuIGRpcmVjdGx5CmNvbnRhaW4gZmllbGQgY29uZmlndXJhdGlv\nbnMsIGJ1dCBpbiBlZGl0IHZpZXdzIHRob3NlIGNvbmZpZ3VyYXRpb25zIGNh\nbgphbHNvIGJlIG5lc3RlZCB3aXRoaW4gZ3JvdXAgY29uZmlndXJhdGlvbnMu\nIEJlbG93IGV4YW1wbGVzIHJlc3VsdCBhbgplcXVhbCBjb25maWd1cmF0aW9u\nOgoKICAgIFJhaWxzQWRtaW4uY29uZmlnIGRvIHxjb25maWd8CiAgICAgIGNv\nbmZpZy5tb2RlbCBUZWFtIGRvCiAgICAgICAgZWRpdCBkbwogICAgICAgICAg\nZ3JvdXAgOmRlZmF1bHQgZG8KICAgICAgICAgICAgbGFiZWwgIkRlZmF1bHQg\nZ3JvdXAiCiAgICAgICAgICBlbmQKICAgICAgICAgIGZpZWxkIDpuYW1lIGRv\nCiAgICAgICAgICAgIGxhYmVsICJUaXRsZSIKICAgICAgICAgICAgZ3JvdXAg\nOmRlZmF1bHQKICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgICBlbmQK\nICAgIGVuZAoKICAgIFJhaWxzQWRtaW4uY29uZmlnIGRvIHxjb25maWd8CiAg\nICAgIGNvbmZpZy5tb2RlbCBUZWFtIGRvCiAgICAgICAgZWRpdCBkbwogICAg\nICAgICAgZ3JvdXAgOmRlZmF1bHQgZG8KICAgICAgICAgICAgbGFiZWwgIkRl\nZmF1bHQgZ3JvdXAiCiAgICAgICAgICAgIGZpZWxkIDpuYW1lIGRvCiAgICAg\nICAgICAgICAgbGFiZWwgIlRpdGxlIgogICAgICAgICAgICBlbmQKICAgICAg\nICAgIGVuZAogICAgICAgIGVuZAogICAgICBlbmQKICAgIGVuZAoKSW4gZmFj\ndCB0aGUgZmlyc3QgZXhhbXBsZXMgYGdyb3VwIDpkZWZhdWx0YCBjb25maWd1\ncmF0aW9uIGlzIHVubmVjZXNzYXJ5CmFzIHRoZSBkZWZhdWx0IGdyb3VwIGhh\ncyBhbHJlYWR5IGluaXRpYWxpemVkIGFsbCBmaWVsZHMgYW5kIGJlbG9uZ3Mg\ndG8KYXNzb2NpYXRpb25zIGZvciBpdHNlbGYuCgoqKkZpZWxkcyoqCgpKdXN0\nIGxpa2UgaW4gdGhlIGxpc3QgdmlldywgYWxsIGZpZWxkcyBhcmUgdmlzaWJs\nZSBieSBkZWZhdWx0LiBJZiB5b3Ugc3BlY2lmaWNhbGx5CmRlY2xhcmUgZmll\nbGRzLCBvbmx5IGRlZmluZWQgZmllbGRzIHdpbGwgYmUgdmlzaWJsZSBhbmQg\ndGhleSB3aWxsIGJlIHByZXNlbnRlZAppbiB0aGUgb3JkZXIgZGVmaW5lZC4g\nVGh1cyBib3RoIGV4YW1wbGVzIHdvdWxkIHJlbmRlciBhIGZvcm0gd2l0aApv\nbmx5IG9uZSBncm91cCAobGFiZWxlZCAiRGVmYXVsdCBncm91cCIpIHRoYXQg\nd291bGQgY29udGFpbiBvbmx5IG9uZQplbGVtZW50IChsYWJlbGVkICJUaXRs\nZSIpLgoKSW4gdGhlIGxpc3QgdmlldyBsYWJlbCBpcyB0aGUgdGV4dCBkaXNw\nbGF5ZWQgaW4gdGhlIGZpZWxkJ3MgY29sdW1uIGhlYWRlciwgYnV0CmluIHRo\nZSBlZGl0IHZpZXdzIGxhYmVsIGxpdGVyYWxseSBtZWFucyB0aGUgaHRtbCBs\nYWJlbCBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aApmaWVsZCdzIGlucHV0IGVs\nZW1lbnQuCgpOYXR1cmFsbHkgZWRpdCB2aWV3cycgZmllbGRzIGFsc28gaGF2\nZSB0aGUgdmlzaWJsZSBvcHRpb24gYWxvbmcgd2l0aApoaWRlIGFuZCBzaG93\nIGFjY2Vzc29ycyBhcyB0aGUgbGlzdCB2aWV3IGhhcy4KCioqRmllbGRzIC0g\ncmVuZGVyaW5nKioKClRoZSBlZGl0IHZpZXcncyBmaWVsZHMgYXJlIHJlbmRl\ncmVkIHVzaW5nIHBhcnRpYWxzLiBFYWNoIGZpZWxkIHR5cGUgaGFzIGl0cyBv\nd24KcGFydGlhbCBwZXIgZGVmYXVsdCwgYnV0IHRoYXQgY2FuIGJlIG92ZXJy\naWRkZW46CgogICAgUmFpbHNBZG1pbi5jb25maWcgZG8gfGNvbmZpZ3wKICAg\nICAgY29uZmlnLm1vZGVsIFRlYW0gZG8KICAgICAgICBlZGl0IGRvCiAgICAg\nICAgICBmaWVsZCA6bmFtZSBkbwogICAgICAgICAgICBwYXJ0aWFsICJteV9h\nd2Vzb21lX3BhcnRpYWwiCiAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAg\nICAgZW5kCiAgICBlbmQKClRoZSBwYXJ0aWFsIHNob3VsZCBiZSBwbGFjZWQg\naW4geW91ciBhcHBsaWNhdGlvbnMgdGVtcGxhdGUgZm9sZGVyLCBzdWNoIGFz\nCmBhcHAvdmlld3MvcmFpbHNfYWRtaW4vbWFpbi9fbXlfYXdlc29tZV9wYXJ0\naWFsLmh0bWwuZXJiYC4KCk9uZSBjYW4gYWxzbyBjb21wbGV0ZWx5IG92ZXJy\naWRlIHRoZSByZW5kZXJpbmcgbG9naWM6CgogICAgUmFpbHNBZG1pbi5jb25m\naWcgZG8gfGNvbmZpZ3wKICAgICAgY29uZmlnLm1vZGVsIFRlYW0gZG8KICAg\nICAgICBlZGl0IGRvCiAgICAgICAgICBmaWVsZCA6bmFtZSBkbwogICAgICAg\nICAgICByZW5kZXIgZG8KICAgICAgICAgICAgICBiaW5kaW5nc1s6dmlld10u\ncmVuZGVyIDpwYXJ0aWFsID0+IHBhcnRpYWwudG9fcywgOmxvY2FscyA9PiB7\nOmZpZWxkID0+IHNlbGZ9CiAgICAgICAgICAgIGVuZAogICAgICAgICAgZW5k\nCiAgICAgICAgZW5kCiAgICAgIGVuZAogICAgZW5kCgpUaGF0IGV4YW1wbGUg\naXMganVzdCB0aGUgZGVmYXVsdCByZW5kZXJpbmcgbWV0aG9kLCBidXQgaXQg\nc2hvd3MgeW91IHRoYXQgeW91CmhhdmUgYWNjZXNzIHRvIHRoZSBjdXJyZW50\nIHRlbXBsYXRlJ3Mgc2NvcGUgd2l0aCBiaW5kaW5nc1s6dmlld10uIFRoZXJl\nJ3MgYWxzbwpiaW5kaW5nc1s6b2JqZWN0XSBhdmFpbGFibGUsIHdoaWNoIGlz\nIHRoZSBkYXRhYmFzZSByZWNvcmQgYmVpbmcgZWRpdGVkLgpCaW5kaW5ncyBj\nb25jZXB0IHdhcyBpbnRyb2R1Y2VkIGVhcmxpZXIgaW4gdGhpcyBkb2N1bWVu\ndCBhbmQgdGhlCmZ1bmN0aW9uYWxpdHkgaXMgdGhlIHNhbWUuCgoqKkZpZWxk\ncyAtIG92ZXJyaWRpbmcgZmllbGQgdHlwZSoqCgpJZiB5b3UnZCBsaWtlIHRv\nIG92ZXJyaWRlIHRoZSB0eXBlIG9mIHRoZSBmaWVsZCB0aGF0IGdldHMgaW5z\ndGFudGlhdGVkLCB0aGUKZmllbGQgbWV0aG9kIHByb3ZpZGVzIHNlY29uZCBw\nYXJhbWV0ZXIgd2hpY2ggaXMgZmllbGQgdHlwZSBhcyBhIHN5bWJvbC4gRm9y\nCmluc3RhbmNlLCBpZiB3ZSBoYXZlIGEgY29sdW1uIHRoYXQncyBhIHRleHQg\nY29sdW1uIGluIHRoZSBkYXRhYmFzZSwgYnV0IHdlJ2QKbGlrZSB0byBoYXZl\nIGl0IGFzIGEgc3RyaW5nIHR5cGUgd2UgY291bGQgYWNjb21wbGlzaCB0aGF0\nIGxpa2UgdGhpczoKCiAgICBSYWlsc0FkbWluLmNvbmZpZyBkbyB8Y29uZmln\nfAogICAgICBjb25maWcubW9kZWwgVGVhbSBkbwogICAgICAgIGVkaXQgZG8K\nICAgICAgICAgIGZpZWxkIDpkZXNjcmlwdGlvbiwgOnN0cmluZyBkbwogICAg\nICAgICAgICAgIyBjb25maWd1cmF0aW9uIGhlcmUKICAgICAgICAgIGVuZAog\nICAgICAgIGVuZAogICAgICBlbmQKICAgIGVuZAoKSWYgbm8gY29uZmlndXJh\ndGlvbiBuZWVkcyB0byB0YWtlIHBsYWNlIHRoZSBjb25maWd1cmF0aW9uIGJs\nb2NrIGNvdWxkIGhhdmUgYmVlbgpsZWZ0IG91dDoKCiAgICBSYWlsc0FkbWlu\nLmNvbmZpZyBkbyB8Y29uZmlnfAogICAgICBjb25maWcubW9kZWwgVGVhbSBk\nbwogICAgICAgIGVkaXQgZG8KICAgICAgICAgIGZpZWxkIDpkZXNjcmlwdGlv\nbiwgOnN0cmluZwogICAgICAgIGVuZAogICAgICBlbmQKICAgIGVuZAoKQSB3\nb3JkIG9mIHdhcm5pbmcsIGlmIHlvdSBtYWtlIGZpZWxkIGRlY2xhcmF0aW9u\ncyBmb3IgdGhlIHNhbWUgZmllbGQgYSBudW1iZXIKb2YgdGltZXMgd2l0aCBh\nIHR5cGUgZGVmaW5pbmcgc2Vjb25kIGFyZ3VtZW50IGluIHBsYWNlLCB0aGUg\ndHlwZSBkZWZpbml0aW9uCndpbGwgZGl0Y2ggdGhlIG9sZCBmaWVsZCBjb25m\naWd1cmF0aW9uIGFuZCBsb2FkIGEgbmV3IGZpZWxkIGluc3RhbmNlIGluIHBs\nYWNlLgoKKipGaWVsZHMgLSBBdmFpbGFibGUgZmllbGQgdHlwZXMqKgoKUmFp\nbHNBZG1pbiBzaGlwcyB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGQgdHlwZXM6\nCgoqIGJlbG9uZ3NfdG9fYXNzb2NpYXRpb24KKiBib29sZWFuCiogZGF0ZQoq\nIGRhdGV0aW1lCiogZGVjaW1hbAoqIGZpbGVfdXBsb2FkIF9kb2VzIG5vdCBp\nbml0aWFsaXplIGF1dG9tYXRpY2FsbHlfCiogcGFwZXJjbGlwX2ZpbGUgX2lu\naXRpYWxpemVzIGF1dG9tYXRpY2FsbHkgaWYgUGFwZXJjbGlwIGlzIHByZXNl\nbnRfCiogZmxvYXQKKiBoYXNfYW5kX2JlbG9uZ3NfdG9fbWFueV9hc3NvY2lh\ndGlvbgoqIGhhc19tYW55X2Fzc29jaWF0aW9uCiogaGFzX29uZV9hc3NvY2lh\ndGlvbgoqIGludGVnZXIKKiBwYXNzd29yZCBfaW5pdGlhbGl6ZXMgaWYgc3Ry\naW5nIHR5cGUgY29sdW1uJ3MgbmFtZSBpcyBwYXNzd29yZF8KKiBzdHJpbmcK\nKiB0ZXh0CiogdGltZQoqIHRpbWVzdGFtcAoqIHZpcnR1YWwgX3VzZWZ1bCBm\nb3IgZGlzcGxheWluZyBkYXRhIHRoYXQgaXMgY2FsY3VsYXRlZCBhIHJ1bnRp\nbWUKKGZvciBleGFtcGxlIGEgbWV0aG9kIGNhbGwgb24gbW9kZWwgaW5zdGFu\nY2UpXwoKKipGaWVsZHMgLSBDcmVhdGluZyBhIGN1c3RvbSBmaWVsZCB0eXBl\nKioKCklmIHlvdSBoYXZlIGEgcmV1c2VhYmxlIGZpZWxkIHlvdSBjYW4gZGVm\naW5lIGEgY3VzdG9tIGNsYXNzIGV4dGVuZGluZwpgUmFpbHNBZG1pbjo6Q29u\nZmlnOjpGaWVsZHM6OkJhc2VgIGFuZCByZWdpc3RlciBpdCBmb3IgUmFpbHNB\nZG1pbjoKCiAgICBSYWlsc0FkbWluOjpDb25maWc6OkZpZWxkczo6VHlwZXM6\nOnJlZ2lzdGVyKDpteV9hd2Vzb21lX3R5cGUsIE15QXdlc29tZUZpZWxkQ2xh\nc3MpCgpUaGVuIHlvdSBjYW4gdXNlIHlvdXIgY3VzdG9tIGNsYXNzIGluIGEg\nZmllbGQ6CgogICAgUmFpbHNBZG1pbi5jb25maWcgZG8gfGNvbmZpZ3wKICAg\nICAgY29uZmlnLm1vZGVsIFRlYW0gZG8KICAgICAgICBlZGl0IGRvCiAgICAg\nICAgICBmaWVsZCA6bmFtZSwgOm15X2F3ZXNvbWVfdHlwZSBkbwogICAgICAg\nICAgICAgIyBjb25maWd1cmF0aW9uIGhlcmUKICAgICAgICAgIGVuZAogICAg\nICAgIGVuZAogICAgICBlbmQKICAgIGVuZAoKKipGaWVsZHMgLSBDcmVhdGlu\nZyBhIGN1c3RvbSBmaWVsZCBmYWN0b3J5KioKClR5cGUgZ3Vlc3NpbmcgY2Fu\nIGJlIG92ZXJyaWRkZW4gYnkgcmVnaXN0ZXJpbmcgYSBjdXN0b20gZmllbGQg\nImZhY3RvcnkiLCBidXQKZm9yIG5vdyB5b3UgbmVlZCB0byBzdHVkeSBgbGli\nL3JhaWxzX2FkbWluL2NvbmZpZy9maWVsZHMvZmFjdG9yaWVzLypgIGZvcgpl\neGFtcGxlcyBpZiB5b3Ugd2FudCB0byB1c2UgdGhhdCBtZWNoYW5pc20uCgoj\nIyMgTWFzcyBBc3NpZ25tZW50IE9wZXJhdGlvbnMgIyMjCgoqIE1hc3MgYXNz\naWduIGZvciBldmVyeSBtb2RlbCBjb25maWd1cmF0aW9uCiogTWFzcyBhc3Np\nZ24gZm9yIGV2ZXJ5IHNlY3Rpb24gKGNyZWF0ZSwgbGlzdCwgbmF2aWdhdGlv\nbiBhbmQgdXBkYXRlKQoqIE1hc3MgYXNzaWduIGJ5IGZpZWxkIHR5cGUKCioq\nTWFzcyBhc3NpZ24gZm9yIGV2ZXJ5IG1vZGVsIGNvbmZpZ3VyYXRpb24qKgoK\nTWFzcyBhc3NpZ25tZW50IG9wZXJhdGlvbnMgYXJlIHVzZWQgdG8gcGFzcyBp\nbiBjb25maWd1cmF0aW9uIGJsb2NrcyBmb3IKbXVsdGlwbGUgdGFyZ2V0cyBh\ndCBvbmNlLiBGb3IgaW5zdGFuY2UsIHRoZSBjb2RlIGJlbG93IGNvbmZpZ3Vy\nZXMgZXZlcnkgbW9kZWxzJwpsYWJlbCBkaXNwbGF5ZWQgdXBwZXJjYXNlZCBp\nbiB0aGUgbGlzdCB2aWV3LgoKICAgIFJhaWxzQWRtaW4uY29uZmlnIGRvIHxj\nb25maWd8CiAgICAgIGNvbmZpZy5tb2RlbHMgZG8KICAgICAgICBsaXN0IGRv\nCiAgICAgICAgICBsYWJlbCBkbwogICAgICAgICAgICBsYWJlbC51cGNhc2Ug\nIyBpbiB0aGlzIGNvbnRleHQgbGFiZWwgcmVmZXJzIHRvIGRlZmF1bHQgbGFi\nZWwgbWV0aG9kCiAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgICAgZW5k\nCiAgICBlbmQKCioqTWFzcyBhc3NpZ24gZm9yIGV2ZXJ5IHNlY3Rpb24gKGNy\nZWF0ZSwgbGlzdCwgbmF2aWdhdGlvbiBhbmQgdXBkYXRlKSoqCgpJZiBvbmUg\nd291bGQgbGlrZSB0byBhc3NpZ24gdGhhdCBzYW1lIGJlaGF2aW9yIGZvciBh\nbGwgdGhlIGRpZmZlcmVudCB2aWV3cyBpbgpSYWlsc0FkbWluIChjcmVhdGUs\nIGxpc3QsIG5hdmlnYXRpb24gYW5kIHVwZGF0ZSkgb25lIGNvdWxkIHBhc3Mg\ndGhlIGxhYmVsCmRlZmluaXRpb24gb25lIGxldmVsIGhpZ2hlcjoKCiAgICBS\nYWlsc0FkbWluLmNvbmZpZyBkbyB8Y29uZmlnfAogICAgICBjb25maWcubW9k\nZWxzIGRvCiAgICAgICAgbGFiZWwgZG8KICAgICAgICAgIGxhYmVsLnVwY2Fz\nZQogICAgICAgIGVuZAogICAgICBlbmQKICAgIGVuZAoKTmF0dXJhbGx5IHRo\naXMgYWxzbyB3b3JrcyBmb3IgYSBzaW5nbGUgbW9kZWwgY29uZmlndXJhdGlv\nbjoKCiAgICBSYWlsc0FkbWluLmNvbmZpZyBkbyB8Y29uZmlnfAogICAgICBj\nb25maWcubW9kZWwgVGVhbSBkbwogICAgICAgIGxhYmVsIGRvCiAgICAgICAg\nICBsYWJlbC51cGNhc2UKICAgICAgICBlbmQKICAgICAgZW5kCiAgICBlbmQK\nCioqTWFzcyBhc3NpZ24gYnkgZmllbGQgdHlwZSoqCgpPbmUgY2FuIGFsc28g\nYXNzaWduIGNvbmZpZ3VyYXRpb25zIGZvciBhbGwgZmllbGRzIGJ5IHR5cGUu\nIEZvciBpbnN0YW5jZQptb2RpZnlpbmcgdGhlIGRhdGUgcHJlc2VudGF0aW9u\nIG9mIGFsbCBkYXRldGltZSBmaWVsZHMgaW4gYWxsIHNlY3Rpb25zIGNhbiBi\nZQphY2NvbXBsaXNoZWQgbGlrZSB0aGlzOgoKICAgIFJhaWxzQWRtaW4uY29u\nZmlnIGRvIHxjb25maWd8CiAgICAgIGNvbmZpZy5tb2RlbHMgZG8KICAgICAg\nICBmaWVsZHNfb2ZfdHlwZSA6ZGF0ZXRpbWUgZG8KICAgICAgICAgIHN0cmZ0\naW1lX2Zvcm1hdCAiJVktJW0tJWQiCiAgICAgICAgZW5kCiAgICAgIGVuZAog\nICAgZW5kCgpBdXRob3JpemF0aW9uCi0tLS0tLS0tLS0tLS0KClJhaWxzIEFk\nbWluIGhhcyBubyBzcGVjaWZpYyBhdXRob3JpemF0aW9uIHJlcXVpcmVtZW50\ncyBzbyB5b3UgY2FuIHVzZQp3aGljaGV2ZXIgYXV0aHogZnJhbWV3b3JrIGJl\nc3Qgc3VpdHMgeW91ciBuZWVkcy4KCiMjIyBEZWNsYXJhdGl2ZSBBdXRob3Jp\nemF0aW9uCgpbRGVjbGFyYXRpdmUgQXV0aG9yaXphdGlvbl0oaHR0cHM6Ly9n\naXRodWIuY29tL3N0ZmZuL2RlY2xhcmF0aXZlX2F1dGhvcml6YXRpb24pCndv\ncmtzIHdlbGwgd2l0aCBSYWlscyBBZG1pbi4gIFlvdSBuZWVkIHRvIGhvb2sK\nZGVjbGFyYXRpdmVfYXV0aG9yaXphdGlvbidzIGNvZGUgaW50byBSYWlscyBB\nZG1pbidzIGNvbnRyb2xsZXJzIGFuZAp3cml0ZSBhcHByb3ByaWF0ZSBhdXRo\nb3JpemF0aW9uIGRlY2xhcmF0aW9ucy4KCllvdSBjYW4gaG9vayBkZWNsYXJh\ndGl2ZV9hdXRob3JpemF0aW9uIGludG8gUmFpbHMgQWRtaW4gdXNpbmcgY29k\nZQpsaWtlIHRoaXMgaW4gYW4gaW5pdGlhbGl6ZXIgKGUuZy4sIGNvbmZpZy9p\nbml0aWFsaXplcnMvcmFpbHNfYWRtaW4ucmIpOgoKICAgIHJlcXVpcmUgInJh\naWxzX2FkbWluL2FwcGxpY2F0aW9uX2NvbnRyb2xsZXIiCgogICAgbW9kdWxl\nIFJhaWxzQWRtaW4KICAgICAgY2xhc3MgQXBwbGljYXRpb25Db250cm9sbGVy\nIDwgOjpBcHBsaWNhdGlvbkNvbnRyb2xsZXIKICAgICAgICBmaWx0ZXJfYWNj\nZXNzX3RvIDphbGwKICAgICAgZW5kCiAgICBlbmQKCkJ5IGRlZmF1bHQsIGFj\nY2VzcyB0byB0aGUgY29udHJvbGxlcnMgd2lsbCBiZSBkZW5pZWQgdG8gYWxs\nIHVzZXJzLCBzbwp5b3UgbmVlZCB0byB3cml0ZSBzb21lIGF1dGh6IHJ1bGVz\nIHNvIHRoYXQgdGhlIGFwcHJvcHJpYXRlIHVzZXJzIGNhbgpnZXQgYWNjZXNz\nLiAgVGhlc2UgcnVsZXMgd2lsbCB2YXJ5LCBidXQgaGVyZSdzIGFuIGV4YW1w\nbGU6CgogICAgYXV0aG9yaXphdGlvbiBkbwogICAgICByb2xlIDphZG1pbiBk\nbwogICAgICAgIGhhc19wZXJtaXNzaW9uX29uIDpyYWlsc19hZG1pbl9oaXN0\nb3J5LCA6dG8gPT4gOmxpc3QKICAgICAgICBoYXNfcGVybWlzc2lvbl9vbiA6\ncmFpbHNfYWRtaW5fbWFpbiwgOnRvID0+IFs6aW5kZXgsIDpzaG93LCA6bmV3\nLCA6ZWRpdCwgOmNyZWF0ZSwgOnVwZGF0ZSwgOmRlc3Ryb3ksIDpsaXN0LCA6\nZGVsZXRlLCA6Z2V0X3BhZ2VzLCA6c2hvd19oaXN0b3J5XQogICAgICBlbmQK\nICAgIGVuZAoKVGhpcyB3aWxsIGFsbG93IHRoZSA6YWRtaW4gcm9sZSB0byBk\nbyBldmVyeXRoaW5nLCBhbmQgd2lsbCBwcmV2ZW50IGFsbApvdGhlciByb2xl\ncyBmcm9tIGRvaW5nIGFueXRoaW5nLgoKQ29udHJpYnV0aW5nCi0tLS0tLS0t\nLS0tLQpJbiB0aGUgc3Bpcml0IG9mIFtmcmVlIHNvZnR3YXJlXShodHRwOi8v\nd3d3LmZzZi5vcmcvbGljZW5zaW5nL2Vzc2F5cy9mcmVlLXN3Lmh0bWwpLCAq\nKmV2ZXJ5b25lKiogaXMgZW5jb3VyYWdlZCB0byBoZWxwIGltcHJvdmUgdGhp\ncyBwcm9qZWN0LgoKSGVyZSBhcmUgc29tZSB3YXlzICp5b3UqIGNhbiBjb250\ncmlidXRlOgoKKiBieSB1c2luZyBhbHBoYSwgYmV0YSwgYW5kIHByZXJlbGVh\nc2UgdmVyc2lvbnMKKiBieSByZXBvcnRpbmcgYnVncwoqIGJ5IHN1Z2dlc3Rp\nbmcgbmV3IGZlYXR1cmVzCiogYnkgW3RyYW5zbGF0aW5nIHRvIGEgbmV3IGxh\nbmd1YWdlXShodHRwczovL2dpdGh1Yi5jb20vc2ZlcmlrL3JhaWxzX2FkbWlu\nL3RyZWUvbWFzdGVyL2NvbmZpZy9sb2NhbGVzKQoqIGJ5IHdyaXRpbmcgb3Ig\nZWRpdGluZyBkb2N1bWVudGF0aW9uCiogYnkgd3JpdGluZyBzcGVjaWZpY2F0\naW9ucwoqIGJ5IHdyaXRpbmcgY29kZSAoKipubyBwYXRjaCBpcyB0b28gc21h\nbGwqKjogZml4IHR5cG9zLCBhZGQgY29tbWVudHMsIGNsZWFuIHVwIGluY29u\nc2lzdGVudCB3aGl0ZXNwYWNlKQoqIGJ5IHJlZmFjdG9yaW5nIGNvZGUKKiBi\neSByZXNvbHZpbmcgW2lzc3Vlc10oaHR0cDovL2dpdGh1Yi5jb20vc2Zlcmlr\nL3JhaWxzX2FkbWluL2lzc3VlcykKKiBieSByZXZpZXdpbmcgcGF0Y2hlcwoK\nU3VibWl0dGluZyBhbiBJc3N1ZQotLS0tLS0tLS0tLS0tLS0tLS0tCldlIHVz\nZSB0aGUgW0dpdEh1YiBpc3N1ZSB0cmFja2VyXShodHRwOi8vZ2l0aHViLmNv\nbS9zZmVyaWsvcmFpbHNfYWRtaW4vaXNzdWVzKSB0byB0cmFjayBidWdzIGFu\nZApmZWF0dXJlcy4gQmVmb3JlIHN1Ym1pdHRpbmcgYSBidWcgcmVwb3J0IG9y\nIGZlYXR1cmUgcmVxdWVzdCwgY2hlY2sgdG8gbWFrZSBzdXJlIGl0IGhhc24n\ndCBhbHJlYWR5CmJlZW4gc3VibWl0dGVkLiBZb3UgY2FuIGluZGljYXRlIHN1\ncHBvcnQgZm9yIGFuIGV4aXN0aW5nIGlzc3VzZSBieSB2b3RpbmcgaXQgdXAu\nIFdoZW4gc3VibWl0dGluZyBhCmJ1ZyByZXBvcnQsIHBsZWFzZSBpbmNsdWRl\nIGEgW0dpc3RdKGh0dHA6Ly9naXN0LmdpdGh1Yi5jb20vKSB0aGF0IGluY2x1\nZGVzIGEgc3RhY2sgdHJhY2UgYW5kIGFueQpkZXRhaWxzIHRoYXQgbWF5IGJl\nIG5lY2Vzc2FyeSB0byByZXByb2R1Y2UgdGhlIGJ1ZywgaW5jbHVkaW5nIHlv\ndXIgZ2VtIHZlcnNpb24sIFJ1YnkgdmVyc2lvbiwgYW5kCm9wZXJhdGluZyBz\neXN0ZW0uIElkZWFsbHksIGEgYnVnIHJlcG9ydCBzaG91bGQgaW5jbHVkZSBh\nIHB1bGwgcmVxdWVzdCB3aXRoIGZhaWxpbmcgc3BlY3MuCgpTdWJtaXR0aW5n\nIGEgUHVsbCBSZXF1ZXN0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMS4g\nRm9yayB0aGUgcHJvamVjdC4KMi4gQ3JlYXRlIGEgdG9waWMgYnJhbmNoLgoz\nLiBJbXBsZW1lbnQgeW91ciBmZWF0dXJlIG9yIGJ1ZyBmaXguICAqTk9URSog\nLSB0aGVyZSdzIGEgc21hbGwgdGVzdCBhcHAgbG9jYXRlZCBpbiB0aGUgc3Bl\nYy9kdW1teV9hcHAgZGlyZWN0b3J5IHRoYXQgeW91IGNhbiB1c2UgdG8gZXhw\nZXJpbWVudCB3aXRoIHJhaWxzX2FkbWluLgo0LiBBZGQgZG9jdW1lbnRhdGlv\nbiBmb3IgeW91ciBmZWF0dXJlIG9yIGJ1ZyBmaXguCjUuIFJ1biBgYnVuZGxl\nIGV4ZWMgcmFrZSBkb2M6eWFyZGAuIElmIHlvdXIgY2hhbmdlcyBhcmUgbm90\nIDEwMCUgZG9jdW1lbnRlZCwgZ28gYmFjayB0byBzdGVwIDQuCjYuIEFkZCBz\ncGVjcyBmb3IgeW91ciBmZWF0dXJlIG9yIGJ1ZyBmaXguCjcuIFJ1biBgYnVu\nZGxlIGV4ZWMgcmFrZSBzcGVjYC4gSWYgeW91ciBjaGFuZ2VzIGFyZSBub3Qg\nMTAwJSBjb3ZlcmVkLCBnbyBiYWNrIHRvIHN0ZXAgNi4KOC4gQ29tbWl0IGFu\nZCBwdXNoIHlvdXIgY2hhbmdlcy4KOS4gU3VibWl0IGEgcHVsbCByZXF1ZXN0\nLiBQbGVhc2UgZG8gbm90IGluY2x1ZGUgY2hhbmdlcyB0byB0aGUgZ2Vtc3Bl\nYywgdmVyc2lvbiwgb3IgaGlzdG9yeSBmaWxlLiAoSWYgeW91IHdhbnQgdG8g\nY3JlYXRlIHlvdXIgb3duIHZlcnNpb24gZm9yIHNvbWUgcmVhc29uLCBwbGVh\nc2UgZG8gc28gaW4gYSBzZXBhcmF0ZSBjb21taXQuKQoKQ29udGFjdAotLS0t\nLS0tCklmIHlvdSBoYXZlIHF1ZXN0aW9ucyBhYm91dCBjb250cmlidXRpbmcg\ndG8gUmFpbHNBZG1pbiwgcGxlYXNlIGNvbnRhY3QgW0VyaWsgTWljaGFlbHMt\nT2Jlcl0oaHR0cDovL2dpdGh1Yi5jb20vc2ZlcmlrKSBhbmQgW0JvZ2RhbiBH\nYXphXShodHRwOi8vZ2l0aHViLmNvbS9odXJyeWNhbmUpLgo=\n",
4
+ "size": 25325,
5
+ "encoding": "base64",
6
+ "sha": "94616fa57520ac8147522c7cf9f03d555595c5ea"
7
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "commit_id": "629e9fd9d4df25528e84d31afdc8ebeb0f56fbb3",
3
+ "created_at": "2012-01-12T18:34:03Z",
4
+ "position": null,
5
+ "line": null,
6
+ "body": " (1) I do not agree with 'needs to be fixed'.\r\n\r\nwhy can't tests be order dependent after all? it doesn't hurt actually, and I have yet to see a refactoring case where it became a PITA.\r\n\r\n (2) Even if you don't care about the reason builds fail ('a.k.a needs to be fixed'), you are supposing that tests are not order dependent because of the 'order random'. But in reality you are just checking a random subset of random (hem..), you can't assert that with the color. \r\n\r\nA green build can then mean 2 things: \r\n\r\n* build is green\r\n* build is greenish, order dependent\r\n\r\nWhich doesn't help with (1)\r\n\r\n (3) When comparing builds on Travis or with git dissect, (2) will bite you while debugging at 12pm and make you cry your Mum that you really don't give a shit about (1)\r\n\r\nI guess.",
7
+ "url": "https://api.github.com/repos/sferik/rails_admin/comments/861907",
8
+ "updated_at": "2012-01-12T18:35:59Z",
9
+ "user": {
10
+ "url": "https://api.github.com/users/bbenezech",
11
+ "login": "bbenezech",
12
+ "gravatar_id": "c1607873b99845b2cd53f8634860d4d4",
13
+ "avatar_url": "https://secure.gravatar.com/avatar/c1607873b99845b2cd53f8634860d4d4?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
14
+ "id": 26794
15
+ },
16
+ "path": null,
17
+ "id": 861907,
18
+ "html_url": "https://github.com/sferik/rails_admin/commit/629e9fd9d4#commitcomment-861907"
19
+ }
@@ -0,0 +1,78 @@
1
+ [
2
+ {
3
+ "commit_id": "629e9fd9d4df25528e84d31afdc8ebeb0f56fbb3",
4
+ "created_at": "2012-01-12T10:21:32Z",
5
+ "position": null,
6
+ "line": null,
7
+ "body": "Hey Eric,\r\n\r\nI think it's a terrible idea: for a number of reasons (dissections, etc.), test suite should stay deterministic IMO.\r\n",
8
+ "url": "https://api.github.com/repos/sferik/rails_admin/comments/860296",
9
+ "html_url": "https://github.com/sferik/rails_admin/commit/629e9fd9d4#commitcomment-860296",
10
+ "updated_at": "2012-01-12T10:21:32Z",
11
+ "user": {
12
+ "url": "https://api.github.com/users/bbenezech",
13
+ "avatar_url": "https://secure.gravatar.com/avatar/c1607873b99845b2cd53f8634860d4d4?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
14
+ "login": "bbenezech",
15
+ "gravatar_id": "c1607873b99845b2cd53f8634860d4d4",
16
+ "id": 26794
17
+ },
18
+ "path": null,
19
+ "id": 860296
20
+ },
21
+ {
22
+ "commit_id": "629e9fd9d4df25528e84d31afdc8ebeb0f56fbb3",
23
+ "created_at": "2012-01-12T17:09:17Z",
24
+ "position": null,
25
+ "line": null,
26
+ "body": "I'm not sure what you mean by \"dissections\". Could you please spell out the reasons you're against this?\r\n\r\nI want to make sure our tests pass regardless of what order they're run in. For example, if one test creates something and the next test depends on that thing exiting for it to pass, that indicates an incomplete test that needs to be fixed.",
27
+ "url": "https://api.github.com/repos/sferik/rails_admin/comments/861577",
28
+ "html_url": "https://github.com/sferik/rails_admin/commit/629e9fd9d4#commitcomment-861577",
29
+ "updated_at": "2012-01-12T17:09:17Z",
30
+ "user": {
31
+ "url": "https://api.github.com/users/sferik",
32
+ "avatar_url": "https://secure.gravatar.com/avatar/1f74b13f1e5c6c69cb5d7fbaabb1e2cb?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
33
+ "login": "sferik",
34
+ "gravatar_id": "1f74b13f1e5c6c69cb5d7fbaabb1e2cb",
35
+ "id": 10308
36
+ },
37
+ "path": null,
38
+ "id": 861577
39
+ },
40
+ {
41
+ "commit_id": "629e9fd9d4df25528e84d31afdc8ebeb0f56fbb3",
42
+ "created_at": "2012-01-12T18:34:03Z",
43
+ "position": null,
44
+ "line": null,
45
+ "body": " (1) I do not agree with 'needs to be fixed'.\r\n\r\nwhy can't tests be order dependent after all? it doesn't hurt actually, and I have yet to see a refactoring case where it became a PITA.\r\n\r\n (2) Even if you don't care about the reason builds fail ('a.k.a needs to be fixed'), you are supposing that tests are not order dependent because of the 'order random'. But in reality you are just checking a random subset of random (hem..), you can't assert that with the color. \r\n\r\nA green build can then mean 2 things: \r\n\r\n* build is green\r\n* build is greenish, order dependent\r\n\r\nWhich doesn't help with (1)\r\n\r\n (3) When comparing builds on Travis or with git dissect, (2) will bite you while debugging at 12pm and make you cry your Mum that you really don't give a shit about (1)\r\n\r\nI guess.",
46
+ "url": "https://api.github.com/repos/sferik/rails_admin/comments/861907",
47
+ "html_url": "https://github.com/sferik/rails_admin/commit/629e9fd9d4#commitcomment-861907",
48
+ "updated_at": "2012-01-12T18:35:59Z",
49
+ "user": {
50
+ "url": "https://api.github.com/users/bbenezech",
51
+ "avatar_url": "https://secure.gravatar.com/avatar/c1607873b99845b2cd53f8634860d4d4?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
52
+ "login": "bbenezech",
53
+ "gravatar_id": "c1607873b99845b2cd53f8634860d4d4",
54
+ "id": 26794
55
+ },
56
+ "path": null,
57
+ "id": 861907
58
+ },
59
+ {
60
+ "commit_id": "629e9fd9d4df25528e84d31afdc8ebeb0f56fbb3",
61
+ "created_at": "2012-01-12T18:52:25Z",
62
+ "position": null,
63
+ "line": null,
64
+ "body": "From the [RSpec 2.8 release notes](http://blog.davidchelimsky.net/2012/01/04/rspec-28-is-released/): \r\n\r\n> When you use --order random, RSpec prints out the random number it used to seed the randomizer. When you think you’ve found an order-dependency bug, you can pass the seed along and the order will remain consistent:\r\n\r\n> --order rand:3455\r\n\r\nSo specs can be made deterministic for any particular seed.\r\n\r\nOver time, we should catch all of the order-dependency bugs in the specs.",
65
+ "url": "https://api.github.com/repos/sferik/rails_admin/comments/861948",
66
+ "html_url": "https://github.com/sferik/rails_admin/commit/629e9fd9d4#commitcomment-861948",
67
+ "updated_at": "2012-01-12T18:52:25Z",
68
+ "user": {
69
+ "url": "https://api.github.com/users/sferik",
70
+ "avatar_url": "https://secure.gravatar.com/avatar/1f74b13f1e5c6c69cb5d7fbaabb1e2cb?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
71
+ "login": "sferik",
72
+ "gravatar_id": "1f74b13f1e5c6c69cb5d7fbaabb1e2cb",
73
+ "id": 10308
74
+ },
75
+ "path": null,
76
+ "id": 861948
77
+ }
78
+ ]
@@ -0,0 +1,4 @@
1
+ [
2
+ "sferik@gmail.com",
3
+ "sferik@example.com"
4
+ ]
@@ -0,0 +1,212 @@
1
+ [
2
+ {
3
+ "avatar_url": "https://secure.gravatar.com/avatar/6d8ca4feec71d59cc926a9bfb8fd3869?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
4
+ "gravatar_id": "6d8ca4feec71d59cc926a9bfb8fd3869",
5
+ "login": "puls",
6
+ "url": "https://api.github.com/users/puls",
7
+ "id": 9763
8
+ },
9
+ {
10
+ "avatar_url": "https://secure.gravatar.com/avatar/68f4393247277300e4fbb2cdde3f95aa?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
11
+ "gravatar_id": "68f4393247277300e4fbb2cdde3f95aa",
12
+ "login": "joearasin",
13
+ "url": "https://api.github.com/users/joearasin",
14
+ "id": 3767
15
+ },
16
+ {
17
+ "avatar_url": "https://secure.gravatar.com/avatar/4151a046d8e438a1631a9dd91f33c803?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
18
+ "gravatar_id": "4151a046d8e438a1631a9dd91f33c803",
19
+ "login": "webiest",
20
+ "url": "https://api.github.com/users/webiest",
21
+ "id": 10476
22
+ },
23
+ {
24
+ "avatar_url": "https://secure.gravatar.com/avatar/57b01ce246316b789dcc48eaa5a52c38?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
25
+ "gravatar_id": "57b01ce246316b789dcc48eaa5a52c38",
26
+ "login": "burritovoltron",
27
+ "url": "https://api.github.com/users/burritovoltron",
28
+ "id": 103470
29
+ },
30
+ {
31
+ "avatar_url": "https://secure.gravatar.com/avatar/f408a65f2087f77973910a2cadabbc6d?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
32
+ "gravatar_id": "f408a65f2087f77973910a2cadabbc6d",
33
+ "login": "kevn",
34
+ "url": "https://api.github.com/users/kevn",
35
+ "id": 15676
36
+ },
37
+ {
38
+ "avatar_url": "https://secure.gravatar.com/avatar/074d18f816c0eef8468da7cde2d81dcd?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
39
+ "gravatar_id": "074d18f816c0eef8468da7cde2d81dcd",
40
+ "login": "kanevski",
41
+ "url": "https://api.github.com/users/kanevski",
42
+ "id": 59267
43
+ },
44
+ {
45
+ "avatar_url": "https://secure.gravatar.com/avatar/b6ddac83c489cb2fe1d072a5e0ffa124?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
46
+ "gravatar_id": "b6ddac83c489cb2fe1d072a5e0ffa124",
47
+ "login": "pk",
48
+ "url": "https://api.github.com/users/pk",
49
+ "id": 14301
50
+ },
51
+ {
52
+ "avatar_url": "https://secure.gravatar.com/avatar/3cd8add6bfd84c56eb92ab22a22a6de2?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
53
+ "gravatar_id": "3cd8add6bfd84c56eb92ab22a22a6de2",
54
+ "login": "mmcgrana",
55
+ "url": "https://api.github.com/users/mmcgrana",
56
+ "id": 2432
57
+ },
58
+ {
59
+ "avatar_url": "https://secure.gravatar.com/avatar/b74e5610efa082944d3200c13a5d92e9?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
60
+ "gravatar_id": "b74e5610efa082944d3200c13a5d92e9",
61
+ "login": "intelliot",
62
+ "url": "https://api.github.com/users/intelliot",
63
+ "id": 81505
64
+ },
65
+ {
66
+ "avatar_url": "https://secure.gravatar.com/avatar/023ae16f906f11189baa874b0c36aca1?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
67
+ "gravatar_id": "023ae16f906f11189baa874b0c36aca1",
68
+ "login": "trafnar",
69
+ "url": "https://api.github.com/users/trafnar",
70
+ "id": 6732
71
+ },
72
+ {
73
+ "avatar_url": "https://secure.gravatar.com/avatar/1b0913ce73ee61d8305608037bcc4a0a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
74
+ "gravatar_id": "1b0913ce73ee61d8305608037bcc4a0a",
75
+ "login": "hoverbird",
76
+ "url": "https://api.github.com/users/hoverbird",
77
+ "id": 279
78
+ },
79
+ {
80
+ "avatar_url": "https://secure.gravatar.com/avatar/ed64926147995b3fce2ed2bc04f94537?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
81
+ "gravatar_id": "ed64926147995b3fce2ed2bc04f94537",
82
+ "login": "collin",
83
+ "url": "https://api.github.com/users/collin",
84
+ "id": 7783
85
+ },
86
+ {
87
+ "avatar_url": "https://secure.gravatar.com/avatar/29eeded35880f6999ea06ba788476b28?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
88
+ "gravatar_id": "29eeded35880f6999ea06ba788476b28",
89
+ "login": "ryanemmm",
90
+ "url": "https://api.github.com/users/ryanemmm",
91
+ "id": 100411
92
+ },
93
+ {
94
+ "avatar_url": "https://secure.gravatar.com/avatar/c7e2ce5b40f683dfb6c1bdf5e6af0c72?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
95
+ "gravatar_id": "c7e2ce5b40f683dfb6c1bdf5e6af0c72",
96
+ "login": "joshbuddy",
97
+ "url": "https://api.github.com/users/joshbuddy",
98
+ "id": 8898
99
+ },
100
+ {
101
+ "avatar_url": "https://secure.gravatar.com/avatar/33fa6a2d8baf81dfaec946b6a1e6aae5?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
102
+ "gravatar_id": "33fa6a2d8baf81dfaec946b6a1e6aae5",
103
+ "login": "jaigouk",
104
+ "url": "https://api.github.com/users/jaigouk",
105
+ "id": 6720
106
+ },
107
+ {
108
+ "avatar_url": "https://secure.gravatar.com/avatar/974dfefd383e9a95d65da3400df373e6?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
109
+ "gravatar_id": "974dfefd383e9a95d65da3400df373e6",
110
+ "login": "dianakimball",
111
+ "url": "https://api.github.com/users/dianakimball",
112
+ "id": 153317
113
+ },
114
+ {
115
+ "avatar_url": "https://secure.gravatar.com/avatar/7f67a350859f0ab846c91afa1f66cc4f?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
116
+ "gravatar_id": "7f67a350859f0ab846c91afa1f66cc4f",
117
+ "login": "jamiew",
118
+ "url": "https://api.github.com/users/jamiew",
119
+ "id": 1903
120
+ },
121
+ {
122
+ "avatar_url": "https://secure.gravatar.com/avatar/bb108e4ccd3d3d79350b167b62e2db2a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
123
+ "gravatar_id": "bb108e4ccd3d3d79350b167b62e2db2a",
124
+ "login": "bry4n",
125
+ "url": "https://api.github.com/users/bry4n",
126
+ "id": 73400
127
+ },
128
+ {
129
+ "avatar_url": "https://secure.gravatar.com/avatar/22c07ebd300e450d75e9e9ee9e974793?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
130
+ "gravatar_id": "22c07ebd300e450d75e9e9ee9e974793",
131
+ "login": "bumi",
132
+ "url": "https://api.github.com/users/bumi",
133
+ "id": 318
134
+ },
135
+ {
136
+ "avatar_url": "https://secure.gravatar.com/avatar/258773b239789d2ac268d5d5fa23198a?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
137
+ "gravatar_id": "258773b239789d2ac268d5d5fa23198a",
138
+ "login": "timtrueman",
139
+ "url": "https://api.github.com/users/timtrueman",
140
+ "id": 20725
141
+ },
142
+ {
143
+ "avatar_url": "https://secure.gravatar.com/avatar/49e8a75b7e9c4c8b30c00bdc9eda0533?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
144
+ "gravatar_id": "49e8a75b7e9c4c8b30c00bdc9eda0533",
145
+ "login": "diegorv",
146
+ "url": "https://api.github.com/users/diegorv",
147
+ "id": 24455
148
+ },
149
+ {
150
+ "avatar_url": "https://secure.gravatar.com/avatar/3f5d173a9cc051b60305646dbf5d2916?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
151
+ "gravatar_id": "3f5d173a9cc051b60305646dbf5d2916",
152
+ "login": "gleuch",
153
+ "url": "https://api.github.com/users/gleuch",
154
+ "id": 9039
155
+ },
156
+ {
157
+ "avatar_url": "https://secure.gravatar.com/avatar/a5e507a14ed7b8f9a5d88b9fa86bed18?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
158
+ "gravatar_id": "a5e507a14ed7b8f9a5d88b9fa86bed18",
159
+ "login": "demet8",
160
+ "url": "https://api.github.com/users/demet8",
161
+ "id": 165866
162
+ },
163
+ {
164
+ "avatar_url": "https://secure.gravatar.com/avatar/e34dfbb343e2913dd9e77a7d4e883e60?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
165
+ "gravatar_id": "e34dfbb343e2913dd9e77a7d4e883e60",
166
+ "login": "deepthawtz",
167
+ "url": "https://api.github.com/users/deepthawtz",
168
+ "id": 31030
169
+ },
170
+ {
171
+ "avatar_url": "https://secure.gravatar.com/avatar/8ff2e3d23012979b285f97c33c8f43ba?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
172
+ "gravatar_id": "8ff2e3d23012979b285f97c33c8f43ba",
173
+ "login": "reddavis",
174
+ "url": "https://api.github.com/users/reddavis",
175
+ "id": 3002
176
+ },
177
+ {
178
+ "avatar_url": "https://secure.gravatar.com/avatar/1ccb5123d1af92e24b32cec62abcf9a8?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
179
+ "gravatar_id": "1ccb5123d1af92e24b32cec62abcf9a8",
180
+ "login": "jackdempsey",
181
+ "url": "https://api.github.com/users/jackdempsey",
182
+ "id": 479
183
+ },
184
+ {
185
+ "avatar_url": "https://secure.gravatar.com/avatar/e841415081a623b7f4d2cf02ae2320a2?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
186
+ "gravatar_id": "e841415081a623b7f4d2cf02ae2320a2",
187
+ "login": "aaronblohowiak",
188
+ "url": "https://api.github.com/users/aaronblohowiak",
189
+ "id": 29454
190
+ },
191
+ {
192
+ "avatar_url": "https://secure.gravatar.com/avatar/6e3d1578114e5d3951a7f90579fff74c?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
193
+ "gravatar_id": "6e3d1578114e5d3951a7f90579fff74c",
194
+ "login": "hasimo",
195
+ "url": "https://api.github.com/users/hasimo",
196
+ "id": 26832
197
+ },
198
+ {
199
+ "avatar_url": "https://secure.gravatar.com/avatar/777b569e52d0c3510308e314b220fd8e?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
200
+ "gravatar_id": "777b569e52d0c3510308e314b220fd8e",
201
+ "login": "heycarsten",
202
+ "url": "https://api.github.com/users/heycarsten",
203
+ "id": 700
204
+ },
205
+ {
206
+ "avatar_url": "https://secure.gravatar.com/avatar/33c797b50c0863be6dc6853bc84a0d2b?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
207
+ "gravatar_id": "33c797b50c0863be6dc6853bc84a0d2b",
208
+ "login": "smallacts",
209
+ "url": "https://api.github.com/users/smallacts",
210
+ "id": 7128
211
+ }
212
+ ]