poolparty 1.4.6 → 1.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. data/VERSION.yml +2 -2
  2. data/bin/cloud-contract +6 -1
  3. data/bin/cloud-list +5 -6
  4. data/bin/cloud-vnc +39 -0
  5. data/examples/rds_cloud.rb +44 -0
  6. data/lib/cloud_providers/connections.rb +0 -1
  7. data/lib/cloud_providers/ec2/ec2.rb +86 -25
  8. data/lib/cloud_providers/ec2/ec2_instance.rb +6 -2
  9. data/lib/cloud_providers/ec2/helpers/ec2_helper.rb +19 -6
  10. data/lib/cloud_providers/ec2/helpers/elastic_load_balancer.rb +3 -3
  11. data/lib/cloud_providers/ec2/helpers/rds_instance.rb +110 -0
  12. data/lib/cloud_providers/remote_instance.rb +5 -3
  13. data/lib/poolparty/cloud.rb +8 -3
  14. data/lib/poolparty/pool.rb +12 -0
  15. data/test/fixtures/clouds/rds_cloud.rb +14 -0
  16. data/test/fixtures/clouds/rds_missing_params.rb +11 -0
  17. data/test/fixtures/ec2/ec2-describe-security-groups_response_body.xml +23 -0
  18. data/test/fixtures/ec2/rds-describe-db-instances-empty_response_body.xml +9 -0
  19. data/test/lib/poolparty/rds_test.rb +35 -0
  20. data/test/test_helper.rb +4 -4
  21. data/vendor/gems/amazon-ec2/ChangeLog +15 -0
  22. data/vendor/gems/amazon-ec2/README.rdoc +27 -24
  23. data/vendor/gems/amazon-ec2/README_dev.rdoc +0 -2
  24. data/vendor/gems/amazon-ec2/Rakefile +8 -39
  25. data/vendor/gems/amazon-ec2/VERSION +1 -1
  26. data/vendor/gems/amazon-ec2/amazon-ec2.gemspec +24 -16
  27. data/vendor/gems/amazon-ec2/bin/setup.rb +1 -0
  28. data/vendor/gems/amazon-ec2/lib/AWS/Autoscaling/autoscaling.rb +6 -16
  29. data/vendor/gems/amazon-ec2/lib/AWS/EC2/availability_zones.rb +8 -0
  30. data/vendor/gems/amazon-ec2/lib/AWS/EC2/console.rb +2 -0
  31. data/vendor/gems/amazon-ec2/lib/AWS/EC2/devpay.rb +18 -0
  32. data/vendor/gems/amazon-ec2/lib/AWS/EC2/elastic_ips.rb +37 -32
  33. data/vendor/gems/amazon-ec2/lib/AWS/EC2/images.rb +43 -27
  34. data/vendor/gems/amazon-ec2/lib/AWS/EC2/instances.rb +136 -99
  35. data/vendor/gems/amazon-ec2/lib/AWS/EC2/keypairs.rb +3 -17
  36. data/vendor/gems/amazon-ec2/lib/AWS/EC2/security_groups.rb +4 -23
  37. data/vendor/gems/amazon-ec2/lib/AWS/EC2/snapshots.rb +38 -17
  38. data/vendor/gems/amazon-ec2/lib/AWS/EC2/volumes.rb +6 -21
  39. data/vendor/gems/amazon-ec2/lib/AWS/EC2.rb +2 -2
  40. data/vendor/gems/amazon-ec2/lib/AWS/ELB/load_balancers.rb +11 -38
  41. data/vendor/gems/amazon-ec2/lib/AWS/RDS/rds.rb +522 -0
  42. data/vendor/gems/amazon-ec2/lib/AWS/RDS.rb +73 -0
  43. data/vendor/gems/amazon-ec2/lib/AWS/exceptions.rb +103 -25
  44. data/vendor/gems/amazon-ec2/lib/AWS.rb +19 -9
  45. data/vendor/gems/amazon-ec2/perftools/ec2prof +0 -0
  46. data/vendor/gems/amazon-ec2/perftools/ec2prof-results.dot +130 -191
  47. data/vendor/gems/amazon-ec2/perftools/ec2prof-results.txt +100 -126
  48. data/vendor/gems/amazon-ec2/perftools/ec2prof.symbols +102 -129
  49. data/vendor/gems/amazon-ec2/test/test_Autoscaling_groups.rb +3 -2
  50. data/vendor/gems/amazon-ec2/test/test_EC2_images.rb +32 -0
  51. data/vendor/gems/amazon-ec2/test/test_EC2_instances.rb +204 -22
  52. data/vendor/gems/amazon-ec2/test/test_EC2_snapshots.rb +1 -1
  53. data/vendor/gems/amazon-ec2/test/test_ELB_load_balancers.rb +2 -2
  54. data/vendor/gems/amazon-ec2/test/test_RDS.rb +354 -0
  55. data/vendor/gems/amazon-ec2/wsdl/2009-10-31.ec2.wsdl +4261 -0
  56. data/vendor/gems/amazon-ec2/wsdl/2009-11-30.ec2.wsdl +4668 -0
  57. metadata +17 -2
@@ -1,8 +1,8 @@
1
1
  #--
2
- # AWS EC2 CLIENT ERROR CODES
3
- # AWS EC2 can throw error exceptions that contain a '.' in them.
2
+ # AWS ERROR CODES
3
+ # AWS can throw error exceptions that contain a '.' in them.
4
4
  # since we can't name an exception class with that '.' I compressed
5
- # each class name into the non-dot version. This allows us to retain
5
+ # each class name into the non-dot version which allows us to retain
6
6
  # the granularity of the exception.
7
7
  #++
8
8
 
@@ -14,17 +14,26 @@ module AWS
14
14
  # CLIENT : A client side argument error
15
15
  class ArgumentError < Error; end
16
16
 
17
+ # Elastic Compute Cloud
18
+ ############################
19
+
20
+ # EC2 : User has the maximum number of allowed IP addresses.
21
+ class AddressLimitExceeded < Error; end
22
+
23
+ # EC2 : The limit on the number of Amazon EBS volumes attached to one instance has been exceeded.
24
+ class AttachmentLimitExceeded < Error; end
25
+
17
26
  # EC2 : User not authorized.
18
27
  class AuthFailure < Error; end
19
28
 
20
- # EC2 : Invalid AWS Account
21
- class InvalidClientTokenId < Error; end
29
+ # EC2 : Volume is in incorrect state
30
+ class IncorrectState < Error; end
22
31
 
23
- # EC2 : Invalid Parameters for Value
24
- class InvalidParameterValue < Error; end
32
+ # EC2 : User has max allowed concurrent running instances.
33
+ class InstanceLimitExceeded < Error; end
25
34
 
26
- # EC2 : Specified AMI has an unparsable manifest.
27
- class InvalidManifest < Error; end
35
+ # EC2 : The value of an item added to, or removed from, an image attribute is invalid.
36
+ class InvalidAMIAttributeItemValue < Error; end
28
37
 
29
38
  # EC2 : Specified AMI ID is not valid.
30
39
  class InvalidAMIIDMalformed < Error; end
@@ -35,6 +44,12 @@ module AWS
35
44
  # EC2 : Specified AMI ID has been deregistered and is no longer available.
36
45
  class InvalidAMIIDUnavailable < Error; end
37
46
 
47
+ # EC2 : The instance cannot detach from a volume to which it is not attached.
48
+ class InvalidAttachmentNotFound < Error; end
49
+
50
+ # EC2 : The device to which you are trying to attach (i.e. /dev/sdh) is already in use on the instance.
51
+ class InvalidDeviceInUse < Error; end
52
+
38
53
  # EC2 : Specified instance ID is not valid.
39
54
  class InvalidInstanceIDMalformed < Error; end
40
55
 
@@ -59,6 +74,15 @@ module AWS
59
74
  # EC2 : Specified group name is a reserved name.
60
75
  class InvalidGroupReserved < Error; end
61
76
 
77
+ # EC2 : Specified AMI has an unparsable manifest.
78
+ class InvalidManifest < Error; end
79
+
80
+ # EC2 : RunInstances was called with minCount and maxCount set to 0 or minCount > maxCount.
81
+ class InvalidParameterCombination < Error; end
82
+
83
+ # EC2 : The value supplied for a parameter was invalid.
84
+ class InvalidParameterValue < Error; end
85
+
62
86
  # EC2 : Attempt to authorize a permission that has already been authorized.
63
87
  class InvalidPermissionDuplicate < Error; end
64
88
 
@@ -71,22 +95,79 @@ module AWS
71
95
  # EC2 : Specified reservation ID does not exist.
72
96
  class InvalidReservationIDNotFound < Error; end
73
97
 
74
- # EC2 : User has reached max allowed concurrent running instances.
75
- class InstanceLimitExceeded < Error; end
98
+ # EC2 : The snapshot ID that was passed as an argument was malformed.
99
+ class InvalidSnapshotIDMalformed < Error; end
76
100
 
77
- # EC2 : An invalid set of parameters were passed as arguments
78
- class InvalidParameterCombination < Error; end
79
-
80
- # EC2 : An unknown parameter was passed as an argument
81
- class UnknownParameter < Error; end
101
+ # EC2 : The specified snapshot does not exist.
102
+ class InvalidSnapshotIDNotFound < Error; end
82
103
 
83
104
  # EC2 : The user ID is neither in the form of an AWS account ID or one
84
105
  # of the special values accepted by the owner or executableBy flags
85
106
  # in the DescribeImages call.
86
107
  class InvalidUserIDMalformed < Error; end
87
108
 
88
- # EC2 : The value of an item added to, or removed from, an image attribute is invalid.
89
- class InvalidAMIAttributeItemValue < Error; end
109
+ # EC2 : Reserved Instances ID not found.
110
+ class InvalidReservedInstancesId < Error; end
111
+
112
+ # EC2 : Reserved Instances Offering ID not found.
113
+ class InvalidReservedInstancesOfferingId < Error; end
114
+
115
+ # EC2 : The volume ID that was passed as an argument was malformed.
116
+ class InvalidVolumeIDMalformed < Error; end
117
+
118
+ # EC2 : The volume specified does not exist.
119
+ class InvalidVolumeIDNotFound < Error; end
120
+
121
+ # EC2 : The volume already exists in the system.
122
+ class InvalidVolumeIDDuplicate < Error; end
123
+
124
+ # EC2 : The specified volume ID and instance ID are in different Availability Zones.
125
+ class InvalidVolumeIDZoneMismatch < Error; end
126
+
127
+ # EC2 : The zone specified does not exist.
128
+ class InvalidZoneNotFound < Error; end
129
+
130
+ # EC2 : Insufficient Reserved Instances capacity.
131
+ class InsufficientReservedInstancesCapacity < Error; end
132
+
133
+ # EC2 : The instance specified does not support EBS.
134
+ class NonEBSInstance < Error; end
135
+
136
+ # EC2 : The limit on the number of Amazon EBS snapshots in the pending state has been exceeded.
137
+ class PendingSnapshotLimitExceeded < Error; end
138
+
139
+ # EC2 : Your current quota does not allow you to purchase the required number of reserved instances.
140
+ class ReservedInstancesLimitExceeded < Error; end
141
+
142
+ # EC2 : The limit on the number of Amazon EBS snapshots has been exceeded.
143
+ class SnapshotLimitExceeded < Error; end
144
+
145
+ # EC2 : An unknown parameter was passed as an argument
146
+ class UnknownParameter < Error; end
147
+
148
+ # EC2 : The limit on the number of Amazon EBS volumes has been exceeded.
149
+ class VolumeLimitExceeded < Error; end
150
+
151
+ # Server Error Codes
152
+ ###
153
+
154
+ # Server : Internal Error.
155
+ class InternalError < Error; end
156
+
157
+ # Server : Not enough available addresses to satisfy your minimum request.
158
+ class InsufficientAddressCapacity < Error; end
159
+
160
+ # Server : There are not enough available instances to satisfy your minimum request.
161
+ class InsufficientInstanceCapacity < Error; end
162
+
163
+ # Server : There are not enough available reserved instances to satisfy your minimum request.
164
+ class InsufficientReservedInstanceCapacity < Error; end
165
+
166
+ # Server : The server is overloaded and cannot handle the request.
167
+ class Unavailable < Error; end
168
+
169
+ # Elastic Load Balancer
170
+ ############################
90
171
 
91
172
  # ELB : The Load balancer specified was not found.
92
173
  class LoadBalancerNotFound < Error; end
@@ -106,14 +187,11 @@ module AWS
106
187
  # ELB :
107
188
  class InvalidConfigurationRequest < Error; end
108
189
 
109
- # Server : Internal AWS EC2 Error.
110
- class InternalError < Error; end
111
-
112
- # Server : There are not enough available instances to satisfy your minimum request.
113
- class InsufficientInstanceCapacity < Error; end
190
+ # API Errors
191
+ ############################
114
192
 
115
- # Server : The server is overloaded and cannot handle the request.
116
- class Unavailable < Error; end
193
+ # Server : Invalid AWS Account
194
+ class InvalidClientTokenId < Error; end
117
195
 
118
196
  # Server : The provided signature does not match.
119
197
  class SignatureDoesNotMatch < Error; end
@@ -11,7 +11,6 @@
11
11
  %w[ base64 cgi openssl digest/sha1 net/https rexml/document time ostruct ].each { |f| require f }
12
12
 
13
13
  begin
14
- require "rubygems"
15
14
  require 'xmlsimple' unless defined? XmlSimple
16
15
  rescue Exception => e
17
16
  require 'xml-simple' unless defined? XmlSimple
@@ -29,6 +28,14 @@ class Hash
29
28
  self[meth.to_s] || self[meth.to_sym]
30
29
  end
31
30
  end
31
+
32
+ def has?(key)
33
+ self[key] && !self[key].to_s.empty?
34
+ end
35
+
36
+ def does_not_have?(key)
37
+ self[key].nil? || self[key].to_s.empty?
38
+ end
32
39
  end
33
40
 
34
41
 
@@ -178,10 +185,14 @@ module AWS
178
185
  # ("People", [{:name=>'jon', :age=>'22'}, {:name=>'chris'}], {:name => 'Name', :age => 'Age'}) you should get
179
186
  # {"People.1.Name"=>"jon", "People.1.Age"=>'22', 'People.2.Name'=>'chris'}
180
187
  def pathhashlist(key, arr_of_hashes, mappings)
181
- params ={}
188
+ raise ArgumentError, "expected a key that is a String" unless key.is_a? String
189
+ raise ArgumentError, "expected a arr_of_hashes that is an Array" unless arr_of_hashes.is_a? Array
190
+ arr_of_hashes.each{|h| raise ArgumentError, "expected each element of arr_of_hashes to be a Hash" unless h.is_a?(Hash)}
191
+ raise ArgumentError, "expected a mappings that is an Hash" unless mappings.is_a? Hash
192
+ params = {}
182
193
  arr_of_hashes.each_with_index do |hash, i|
183
194
  hash.each do |attribute, value|
184
- params["#{key}.#{i+1}.#{mappings[attribute]}"] = value
195
+ params["#{key}.#{i+1}.#{mappings[attribute]}"] = value.to_s
185
196
  end
186
197
  end
187
198
  params
@@ -213,9 +224,9 @@ module AWS
213
224
  req = Net::HTTP::Post.new("/")
214
225
  req.content_type = 'application/x-www-form-urlencoded'
215
226
  req['User-Agent'] = "github-amazon-ec2-ruby-gem"
216
-
227
+
217
228
  response = @http.request(req, query)
218
-
229
+
219
230
  # Make a call to see if we need to throw an error based on the response given by EC2
220
231
  # All error classes are defined in EC2/exceptions.rb
221
232
  aws_error?(response)
@@ -241,16 +252,15 @@ module AWS
241
252
  }.merge(options)
242
253
 
243
254
  raise ArgumentError, ":action must be provided to response_generator" if options[:action].nil? || options[:action].empty?
244
-
245
- http_response = make_request(options[:action], options[:params])
246
255
 
256
+ http_response = make_request(options[:action], options[:params])
247
257
  http_xml = http_response.body
248
258
  return Response.parse(:xml => http_xml)
249
259
 
250
260
  end
251
261
 
252
262
  # Raises the appropriate error if the specified Net::HTTPResponse object
253
- # contains an Amazon EC2 error; returns +false+ otherwise.
263
+ # contains an AWS error; returns +false+ otherwise.
254
264
  def aws_error?(response)
255
265
 
256
266
  # return false if we got a HTTP 200 code,
@@ -271,7 +281,7 @@ module AWS
271
281
 
272
282
  # An valid error response looks like this:
273
283
  # <?xml version="1.0"?><Response><Errors><Error><Code>InvalidParameterCombination</Code><Message>Unknown parameter: foo</Message></Error></Errors><RequestID>291cef62-3e86-414b-900e-17246eccfae8</RequestID></Response>
274
- # AWS EC2 throws some exception codes that look like Error.SubError. Since we can't name classes this way
284
+ # AWS throws some exception codes that look like Error.SubError. Since we can't name classes this way
275
285
  # we need to strip out the '.' in the error 'Code' and we name the error exceptions with this
276
286
  # non '.' name as well.
277
287
  error_code = doc.root.elements['Errors'].elements['Error'].elements['Code'].text.gsub('.', '')
@@ -1,193 +1,132 @@
1
- digraph "/usr/local/bin/ruby; 2178 samples" {
1
+ digraph "/usr/bin/ruby; 2043 samples" {
2
2
  node [width=0.375,height=0.25];
3
- Legend [shape=box,fontsize=24,shape=plaintext,label="/usr/local/bin/ruby\lTotal samples: 2178\lFocusing on: 2170\lDropped nodes with <= 10 abs(samples)\lDropped edges with <= 2 samples\l"];
4
- N1 [label="XmlSimple#xml_in\n0 (0.0%)\rof 1113 (51.1%)\r",shape=box,fontsize=8.0];
5
- N2 [label="XmlSimple.xml_in\n0 (0.0%)\rof 993 (45.6%)\r",shape=box,fontsize=8.0];
6
- N3 [label="REXML\nElement#each_element\n1 (0.0%)\rof 970 (44.5%)\r",shape=box,fontsize=9.1];
7
- N4 [label="REXML\nElements#each\n24 (1.1%)\rof 970 (44.5%)\r",shape=box,fontsize=13.3];
8
- N5 [label="XmlSimple#collapse\n24 (1.1%)\rof 970 (44.5%)\r",shape=box,fontsize=13.3];
9
- N6 [label="REXML\nXPath.each\n1 (0.0%)\rof 970 (44.5%)\r",shape=box,fontsize=9.1];
10
- N7 [label="EC2\nBase#response_generator\n0 (0.0%)\rof 945 (43.4%)\r",shape=box,fontsize=8.0];
11
- N8 [label="EC2\nResponse.parse\n0 (0.0%)\rof 934 (42.9%)\r",shape=box,fontsize=8.0];
12
- N9 [label="EC2\nBase#describe_images\n0 (0.0%)\rof 918 (42.1%)\r",shape=box,fontsize=8.0];
13
- N10 [label="Class#new\n1 (0.0%)\rof 804 (36.9%)\r",shape=box,fontsize=9.1];
14
- N11 [label="REXML\nParsers\nTreeParser#parse\n0 (0.0%)\rof 801 (36.8%)\r",shape=box,fontsize=8.0];
15
- N12 [label="REXML\nDocument#build\n0 (0.0%)\rof 801 (36.8%)\r",shape=box,fontsize=8.0];
16
- N13 [label="XmlSimple#parse\n0 (0.0%)\rof 801 (36.8%)\r",shape=box,fontsize=8.0];
17
- N14 [label="REXML\nDocument#initialize\n0 (0.0%)\rof 801 (36.8%)\r",shape=box,fontsize=8.0];
18
- N15 [label="REXML\nParsers\nBaseParser#pull\n162 (7.4%)\rof 462 (21.2%)\r",shape=box,fontsize=21.7];
19
- N16 [label="garbage_collector\n352 (16.2%)\r",shape=box,fontsize=28.1];
20
- N17 [label="REXML\nText#value\n17 (0.8%)\rof 316 (14.5%)\r",shape=box,fontsize=12.4];
21
- N18 [label="Array#each\n0 (0.0%)\rof 275 (12.6%)\r",shape=box,fontsize=8.0];
22
- N19 [label="XmlSimple#collapse_text_node\n11 (0.5%)\rof 268 (12.3%)\r",shape=box,fontsize=11.6];
23
- N20 [label="REXML\nElement#has_text?\n22 (1.0%)\rof 263 (12.1%)\r",shape=box,fontsize=13.0];
24
- N21 [label="REXML\nElement#text\n14 (0.6%)\rof 241 (11.1%)\r",shape=box,fontsize=12.0];
25
- N22 [label="XmlSimple#node_to_text\n33 (1.5%)\rof 233 (10.7%)\r",shape=box,fontsize=14.2];
26
- N23 [label="REXML\nSource#match\n123 (5.6%)\rof 166 (7.6%)\r",shape=box,fontsize=19.9];
27
- N24 [label="REXML\nParent#each\n21 (1.0%)\rof 155 (7.1%)\r",shape=box,fontsize=12.9];
28
- N25 [label="REXML\nElement#add_element\n47 (2.2%)\rof 153 (7.0%)\r",shape=box,fontsize=15.4];
29
- N26 [label="Array#map\n0 (0.0%)\rof 152 (7.0%)\r",shape=box,fontsize=8.0];
30
- N27 [label="Object#find\n80 (3.7%)\rof 146 (6.7%)\r",shape=box,fontsize=17.6];
31
- N28 [label="REXML\nDocument#doctype\n80 (3.7%)\rof 140 (6.4%)\r",shape=box,fontsize=17.6];
32
- N29 [label="REXML\nElement#document\n19 (0.9%)\rof 121 (5.6%)\r",shape=box,fontsize=12.7];
33
- N30 [label="REXML\nElement#texts\n46 (2.1%)\rof 110 (5.1%)\r",shape=box,fontsize=15.3];
34
- N31 [label="XmlSimple#has_mixed_content?\n5 (0.2%)\rof 108 (5.0%)\r",shape=box,fontsize=10.4];
35
- N32 [label="REXML\nElements#add\n18 (0.8%)\rof 107 (4.9%)\r",shape=box,fontsize=12.6];
36
- N33 [label="REXML\nElement#root\n102 (4.7%)\r",shape=box,fontsize=18.8];
37
- N34 [label="REXML\nChild#find_all\n50 (2.3%)\rof 101 (4.6%)\r",shape=box,fontsize=15.6];
38
- N35 [label="REXML\nElement#initialize\n20 (0.9%)\rof 97 (4.5%)\r",shape=box,fontsize=12.8];
39
- N36 [label="REXML\nParent#add\n79 (3.6%)\rof 95 (4.4%)\r",shape=box,fontsize=17.5];
40
- N37 [label="REXML\nElement#has_elements?\n12 (0.6%)\rof 95 (4.4%)\r",shape=box,fontsize=11.7];
41
- N38 [label="REXML\nXPathParser#parse\n0 (0.0%)\rof 86 (3.9%)\r",shape=box,fontsize=8.0];
42
- N39 [label="REXML\nElements#empty?\n27 (1.2%)\rof 83 (3.8%)\r",shape=box,fontsize=13.6];
43
- N40 [label="REXML\nParsers\nBaseParser#empty?\n55 (2.5%)\rof 73 (3.4%)\r",shape=box,fontsize=16.0];
44
- N41 [label="REXML\nChild#find\n49 (2.2%)\rof 72 (3.3%)\r",shape=box,fontsize=15.5];
45
- N42 [label="XmlSimple#get_attributes\n22 (1.0%)\rof 56 (2.6%)\r",shape=box,fontsize=13.0];
46
- N43 [label="Set#initialize\n45 (2.1%)\rof 46 (2.1%)\r",shape=box,fontsize=15.2];
47
- N44 [label="REXML\nParsers\nXPathParser#parse\n0 (0.0%)\rof 44 (2.0%)\r",shape=box,fontsize=8.0];
48
- N45 [label="REXML\nParsers\nXPathParser#OrExpr\n3 (0.1%)\rof 44 (2.0%)\r",shape=box,fontsize=9.9];
49
- N46 [label="Regexp#match\n43 (2.0%)\r",shape=box,fontsize=15.0];
50
- N47 [label="REXML\nXPathParser#match\n2 (0.1%)\rof 42 (1.9%)\r",shape=box,fontsize=9.5];
51
- N48 [label="REXML\nElement#get_text\n22 (1.0%)\rof 42 (1.9%)\r",shape=box,fontsize=13.0];
52
- N49 [label="REXML\nParsers\nXPathParser#AndExpr\n3 (0.1%)\rof 41 (1.9%)\r",shape=box,fontsize=9.9];
53
- N50 [label="REXML\nXPathParser#expr\n27 (1.2%)\rof 40 (1.8%)\r",shape=box,fontsize=13.6];
54
- N51 [label="REXML\nParent#initialize\n6 (0.3%)\rof 39 (1.8%)\r",shape=box,fontsize=10.6];
55
- N52 [label="REXML\nText.unnormalize\n38 (1.7%)\r",shape=box,fontsize=14.6];
56
- N53 [label="REXML\nParsers\nXPathParser#EqualityExpr\n3 (0.1%)\rof 38 (1.7%)\r",shape=box,fontsize=9.9];
57
- N54 [label="XmlSimple#merge\n7 (0.3%)\rof 37 (1.7%)\r",shape=box,fontsize=10.8];
58
- N55 [label="REXML\nParsers\nXPathParser#RelationalExpr\n5 (0.2%)\rof 35 (1.6%)\r",shape=box,fontsize=10.4];
59
- N56 [label="Net\nHTTP#request\n0 (0.0%)\rof 34 (1.6%)\r",shape=box,fontsize=8.0];
60
- N57 [label="EC2\nBase#make_request\n0 (0.0%)\rof 34 (1.6%)\r",shape=box,fontsize=8.0];
61
- N58 [label="Net\nHTTP#start\n0 (0.0%)\rof 34 (1.6%)\r",shape=box,fontsize=8.0];
62
- N59 [label="REXML\nAttributes#each\n16 (0.7%)\rof 34 (1.6%)\r",shape=box,fontsize=12.3];
63
- N60 [label="REXML\nChild#initialize\n5 (0.2%)\rof 33 (1.5%)\r",shape=box,fontsize=10.4];
64
- N61 [label="XmlSimple#empty\n33 (1.5%)\r",shape=box,fontsize=14.2];
65
- N62 [label="REXML\nText#initialize\n32 (1.5%)\rof 33 (1.5%)\r",shape=box,fontsize=14.1];
66
- N63 [label="Net\nHTTPResponse#read_body_0\n0 (0.0%)\rof 32 (1.5%)\r",shape=box,fontsize=8.0];
67
- N64 [label="Net\nHTTPResponse#read_chunked\n0 (0.0%)\rof 32 (1.5%)\r",shape=box,fontsize=8.0];
68
- N65 [label="Net\nHTTPResponse#read_body\n0 (0.0%)\rof 32 (1.5%)\r",shape=box,fontsize=8.0];
69
- N66 [label="Net\nHTTPResponse#reading_body\n0 (0.0%)\rof 32 (1.5%)\r",shape=box,fontsize=8.0];
70
- N67 [label="Net\nBufferedIO#read\n1 (0.0%)\rof 32 (1.5%)\r",shape=box,fontsize=9.1];
71
- N68 [label="Net\nHTTPResponse#body\n0 (0.0%)\rof 32 (1.5%)\r",shape=box,fontsize=8.0];
72
- N69 [label="Array#delete_if\n0 (0.0%)\rof 32 (1.5%)\r",shape=box,fontsize=8.0];
73
- N70 [label="XmlSimple#force_array?\n29 (1.3%)\rof 30 (1.4%)\r",shape=box,fontsize=13.8];
74
- N71 [label="REXML\nParsers\nXPathParser#AdditiveExpr\n5 (0.2%)\rof 30 (1.4%)\r",shape=box,fontsize=10.4];
75
- N72 [label="Timeout.timeout\n1 (0.0%)\rof 27 (1.2%)\r",shape=box,fontsize=9.1];
76
- N73 [label="Net\nBufferedIO#rbuf_fill\n1 (0.0%)\rof 27 (1.2%)\r",shape=box,fontsize=9.1];
77
- N74 [label="Object#timeout\n0 (0.0%)\rof 27 (1.2%)\r",shape=box,fontsize=8.0];
78
- N75 [label="REXML\nParsers\nXPathParser#MultiplicativeExpr\n1 (0.0%)\rof 25 (1.1%)\r",shape=box,fontsize=9.1];
79
- N76 [label="REXML\nChild#parent=\n25 (1.1%)\r",shape=box,fontsize=13.4];
80
- N77 [label="REXML\nParsers\nXPathParser#UnaryExpr\n2 (0.1%)\rof 24 (1.1%)\r",shape=box,fontsize=9.5];
81
- N78 [label="REXML\nParent#[]\n24 (1.1%)\r",shape=box,fontsize=13.3];
82
- N79 [label="REXML\nText#to_s\n22 (1.0%)\r",shape=box,fontsize=13.0];
83
- N80 [label="REXML\nElement#whitespace\n22 (1.0%)\r",shape=box,fontsize=13.0];
84
- N17 -> N52 [label=38, weight=12, style="setlinewidth(0.105069)"];
85
- N23 -> N46 [label=43, weight=13, style="setlinewidth(0.118894)"];
86
- N4 -> N6 [label=2353, weight=229, style="setlinewidth(2.000000)"];
87
- N35 -> N10 [label=24, weight=9, style="setlinewidth(0.066359)"];
88
- N22 -> N26 [label=152, weight=33, style="setlinewidth(0.420276)"];
89
- N6 -> N4 [label=2305, weight=225, style="setlinewidth(2.000000)"];
90
- N10 -> N62 [label=33, weight=11, style="setlinewidth(0.091244)"];
91
- N17 -> N29 [label=121, weight=28, style="setlinewidth(0.334562)"];
92
- N57 -> N58 [label=34, weight=11, style="setlinewidth(0.094009)"];
93
- N63 -> N64 [label=32, weight=11, style="setlinewidth(0.088479)"];
94
- N5 -> N61 [label=19, weight=7, style="setlinewidth(0.052535)"];
95
- N21 -> N48 [label=42, weight=13, style="setlinewidth(0.116129)"];
96
- N24 -> N18 [label=134, weight=30, style="setlinewidth(0.370507)"];
97
- N15 -> N10 [label=46, weight=14, style="setlinewidth(0.127189)"];
98
- N35 -> N51 [label=39, weight=12, style="setlinewidth(0.107834)"];
99
- N31 -> N30 [label=41, weight=13, style="setlinewidth(0.113364)"];
100
- N69 -> N50 [label=32, weight=11, style="setlinewidth(0.088479)"];
101
- N10 -> N35 [label=97, weight=24, style="setlinewidth(0.268203)"];
102
- N55 -> N71 [label=30, weight=10, style="setlinewidth(0.082949)"];
103
- N5 -> N31 [label=108, weight=26, style="setlinewidth(0.298618)"];
104
- N15 -> N23 [label=166, weight=35, style="setlinewidth(0.458986)"];
105
- N50 -> N69 [label=32, weight=11, style="setlinewidth(0.088479)"];
106
- N21 -> N17 [label=185, weight=38, style="setlinewidth(0.511521)"];
107
- N39 -> N41 [label=72, weight=19, style="setlinewidth(0.199078)"];
108
- N18 -> N41 [label=55, weight=16, style="setlinewidth(0.152074)"];
109
- N27 -> N18 [label=124, weight=29, style="setlinewidth(0.342857)"];
110
- N53 -> N55 [label=35, weight=12, style="setlinewidth(0.096774)"];
111
- N75 -> N77 [label=24, weight=9, style="setlinewidth(0.066359)"];
112
- N57 -> N56 [label=34, weight=11, style="setlinewidth(0.094009)"];
113
- N5 -> N19 [label=268, weight=50, style="setlinewidth(0.741014)"];
114
- N58 -> N57 [label=34, weight=11, style="setlinewidth(0.094009)"];
115
- N41 -> N24 [label=62, weight=17, style="setlinewidth(0.171429)"];
116
- N47 -> N50 [label=40, weight=13, style="setlinewidth(0.110599)"];
117
- N41 -> N39 [label=16, weight=6, style="setlinewidth(0.044240)"];
118
- N15 -> N40 [label=73, weight=20, style="setlinewidth(0.201843)"];
119
- N5 -> N37 [label=84, weight=22, style="setlinewidth(0.232258)"];
120
- N74 -> N72 [label=27, weight=10, style="setlinewidth(0.074654)"];
121
- N14 -> N12 [label=801, weight=107, style="setlinewidth(2.000000)"];
122
- N64 -> N67 [label=32, weight=11, style="setlinewidth(0.088479)"];
123
- N17 -> N28 [label=140, weight=31, style="setlinewidth(0.387097)"];
124
- N10 -> N14 [label=801, weight=107, style="setlinewidth(2.000000)"];
125
- N20 -> N21 [label=241, weight=46, style="setlinewidth(0.666359)"];
126
- N11 -> N10 [label=33, weight=11, style="setlinewidth(0.091244)"];
127
- N72 -> N73 [label=14, weight=6, style="setlinewidth(0.038710)"];
128
- N27 -> N28 [label=56, weight=16, style="setlinewidth(0.154839)"];
129
- N56 -> N66 [label=32, weight=11, style="setlinewidth(0.088479)"];
130
- N48 -> N27 [label=30, weight=10, style="setlinewidth(0.082949)"];
131
- N22 -> N30 [label=69, weight=19, style="setlinewidth(0.190783)"];
132
- N18 -> N27 [label=124, weight=29, style="setlinewidth(0.342857)"];
133
- N65 -> N63 [label=32, weight=11, style="setlinewidth(0.088479)"];
134
- N11 -> N80 [label=22, weight=8, style="setlinewidth(0.060829)"];
135
- N33 -> N33 [label=77, weight=20, style="setlinewidth(0.212903)"];
136
- N4 -> N5 [label=2408, weight=232, style="setlinewidth(2.000000)"];
137
- N50 -> N18 [label=5, weight=3, style="setlinewidth(0.013825)"];
138
- N13 -> N10 [label=801, weight=107, style="setlinewidth(2.000000)"];
139
- N28 -> N27 [label=116, weight=27, style="setlinewidth(0.320737)"];
140
- N8 -> N2 [label=934, weight=120, style="setlinewidth(2.000000)"];
141
- N5 -> N5 [label=2446, weight=235, style="setlinewidth(2.000000)"];
142
- N49 -> N53 [label=38, weight=12, style="setlinewidth(0.105069)"];
143
- N5 -> N3 [label=2152, weight=215, style="setlinewidth(2.000000)"];
144
- N10 -> N32 [label=3, weight=2, style="setlinewidth(0.008295)"];
145
- N19 -> N22 [label=233, weight=45, style="setlinewidth(0.644240)"];
146
- N42 -> N59 [label=34, weight=11, style="setlinewidth(0.094009)"];
147
- N6 -> N38 [label=86, weight=22, style="setlinewidth(0.237788)"];
148
- N54 -> N70 [label=30, weight=10, style="setlinewidth(0.082949)"];
149
- N44 -> N45 [label=44, weight=14, style="setlinewidth(0.121659)"];
150
- N34 -> N24 [label=93, weight=23, style="setlinewidth(0.257143)"];
151
- N12 -> N11 [label=801, weight=107, style="setlinewidth(2.000000)"];
152
- N1 -> N5 [label=312, weight=55, style="setlinewidth(0.862673)"];
153
- N11 -> N78 [label=24, weight=9, style="setlinewidth(0.066359)"];
154
- N31 -> N37 [label=11, weight=5, style="setlinewidth(0.030415)"];
155
- N71 -> N75 [label=25, weight=9, style="setlinewidth(0.069124)"];
156
- N3 -> N4 [label=2226, weight=220, style="setlinewidth(2.000000)"];
157
- N11 -> N15 [label=462, weight=73, style="setlinewidth(1.277419)"];
158
- N7 -> N57 [label=34, weight=11, style="setlinewidth(0.094009)"];
159
- N38 -> N47 [label=42, weight=13, style="setlinewidth(0.116129)"];
160
- N32 -> N10 [label=97, weight=24, style="setlinewidth(0.268203)"];
161
- N1 -> N13 [label=801, weight=107, style="setlinewidth(2.000000)"];
162
- N31 -> N20 [label=29, weight=10, style="setlinewidth(0.080184)"];
163
- N5 -> N54 [label=37, weight=12, style="setlinewidth(0.102304)"];
164
- N27 -> N48 [label=10, weight=5, style="setlinewidth(0.027650)"];
165
- N22 -> N17 [label=131, weight=30, style="setlinewidth(0.362212)"];
166
- N73 -> N74 [label=27, weight=10, style="setlinewidth(0.074654)"];
167
- N45 -> N49 [label=41, weight=13, style="setlinewidth(0.113364)"];
168
- N66 -> N68 [label=32, weight=11, style="setlinewidth(0.088479)"];
169
- N26 -> N22 [label=152, weight=33, style="setlinewidth(0.420276)"];
170
- N11 -> N36 [label=95, weight=24, style="setlinewidth(0.262673)"];
171
- N37 -> N39 [label=83, weight=22, style="setlinewidth(0.229493)"];
172
- N7 -> N8 [label=911, weight=117, style="setlinewidth(2.000000)"];
173
- N60 -> N32 [label=28, weight=10, style="setlinewidth(0.077419)"];
174
- N9 -> N7 [label=918, weight=118, style="setlinewidth(2.000000)"];
175
- N18 -> N50 [label=5, weight=3, style="setlinewidth(0.013825)"];
176
- N10 -> N43 [label=46, weight=14, style="setlinewidth(0.127189)"];
177
- N38 -> N44 [label=44, weight=14, style="setlinewidth(0.121659)"];
178
- N2 -> N1 [label=993, weight=125, style="setlinewidth(2.000000)"];
179
- N51 -> N60 [label=33, weight=11, style="setlinewidth(0.091244)"];
180
- N67 -> N73 [label=26, weight=9, style="setlinewidth(0.071889)"];
181
- N18 -> N34 [label=79, weight=21, style="setlinewidth(0.218433)"];
182
- N68 -> N65 [label=32, weight=11, style="setlinewidth(0.088479)"];
183
- N29 -> N33 [label=102, weight=25, style="setlinewidth(0.282028)"];
184
- N5 -> N42 [label=56, weight=16, style="setlinewidth(0.154839)"];
185
- N6 -> N10 [label=3, weight=2, style="setlinewidth(0.008295)"];
186
- N36 -> N76 [label=16, weight=6, style="setlinewidth(0.044240)"];
187
- N11 -> N25 [label=153, weight=33, style="setlinewidth(0.423041)"];
188
- N30 -> N34 [label=101, weight=25, style="setlinewidth(0.279263)"];
189
- N25 -> N32 [label=104, weight=25, style="setlinewidth(0.287558)"];
190
- N34 -> N30 [label=37, weight=12, style="setlinewidth(0.102304)"];
191
- N19 -> N61 [label=14, weight=6, style="setlinewidth(0.038710)"];
192
- N5 -> N20 [label=234, weight=45, style="setlinewidth(0.647005)"];
3
+ Legend [shape=box,fontsize=24,shape=plaintext,label="/usr/bin/ruby\lTotal samples: 2043\lFocusing on: 2035\lDropped nodes with <= 10 abs(samples)\lDropped edges with <= 2 samples\l"];
4
+ N1 [label="garbage_collector\n1298 (63.5%)\r",shape=box,fontsize=47.9];
5
+ N2 [label="XmlSimple#xml_in\n0 (0.0%)\rof 507 (24.8%)\r",shape=box,fontsize=8.0];
6
+ N3 [label="XmlSimple.xml_in\n0 (0.0%)\rof 469 (23.0%)\r",shape=box,fontsize=8.0];
7
+ N4 [label="AWS\nResponse.parse\n0 (0.0%)\rof 442 (21.6%)\r",shape=box,fontsize=8.0];
8
+ N5 [label="AWS\nBase#response_generator\n0 (0.0%)\rof 431 (21.1%)\r",shape=box,fontsize=8.0];
9
+ N6 [label="AWS\nEC2\nBase#describe_images\n0 (0.0%)\rof 422 (20.7%)\r",shape=box,fontsize=8.0];
10
+ N7 [label="Class#new\n142 (7.0%)\rof 371 (18.2%)\r",shape=box,fontsize=21.2];
11
+ N8 [label="REXML\nDocument#build\n14 (0.7%)\rof 370 (18.1%)\r",shape=box,fontsize=12.1];
12
+ N9 [label="REXML\nDocument#initialize\n0 (0.0%)\rof 370 (18.1%)\r",shape=box,fontsize=8.0];
13
+ N10 [label="XmlSimple#parse\n0 (0.0%)\rof 370 (18.1%)\r",shape=box,fontsize=8.0];
14
+ N11 [label="REXML\nParsers\nTreeParser#parse\n65 (3.2%)\rof 355 (17.4%)\r",shape=box,fontsize=16.9];
15
+ N12 [label="REXML\nElement#each_element\n5 (0.2%)\rof 338 (16.5%)\r",shape=box,fontsize=10.5];
16
+ N13 [label="REXML\nElements#each\n11 (0.5%)\rof 338 (16.5%)\r",shape=box,fontsize=11.7];
17
+ N14 [label="REXML\nXPath.each\n4 (0.2%)\rof 338 (16.5%)\r",shape=box,fontsize=10.2];
18
+ N15 [label="XmlSimple#collapse\n45 (2.2%)\rof 338 (16.5%)\r",shape=box,fontsize=15.4];
19
+ N16 [label="REXML\nParsers\nBaseParser#pull\n14 (0.7%)\rof 107 (5.2%)\r",shape=box,fontsize=12.1];
20
+ N17 [label="XmlSimple#collapse_text_node\n20 (1.0%)\rof 97 (4.7%)\r",shape=box,fontsize=13.0];
21
+ N18 [label="REXML\nElement#add_element\n2 (0.1%)\rof 94 (4.6%)\r",shape=box,fontsize=9.6];
22
+ N19 [label="REXML\nElements#add\n2 (0.1%)\rof 92 (4.5%)\r",shape=box,fontsize=9.6];
23
+ N20 [label="REXML\nElement#initialize\n18 (0.9%)\rof 81 (4.0%)\r",shape=box,fontsize=12.7];
24
+ N21 [label="XmlSimple#node_to_text\n6 (0.3%)\rof 76 (3.7%)\r",shape=box,fontsize=10.7];
25
+ N22 [label="REXML\nText#value\n19 (0.9%)\rof 74 (3.6%)\r",shape=box,fontsize=12.8];
26
+ N23 [label="REXML\nElement#has_elements?\n0 (0.0%)\rof 55 (2.7%)\r",shape=box,fontsize=8.0];
27
+ N24 [label="REXML\nElement#has_text?\n3 (0.1%)\rof 55 (2.7%)\r",shape=box,fontsize=9.9];
28
+ N25 [label="REXML\nElements#empty?\n2 (0.1%)\rof 55 (2.7%)\r",shape=box,fontsize=9.6];
29
+ N26 [label="REXML\nChild#find\n50 (2.4%)\rof 54 (2.6%)\r",shape=box,fontsize=15.8];
30
+ N27 [label="REXML\nElement#text\n5 (0.2%)\rof 52 (2.5%)\r",shape=box,fontsize=10.5];
31
+ N28 [label="REXML\nElement#texts\n5 (0.2%)\rof 45 (2.2%)\r",shape=box,fontsize=10.5];
32
+ N29 [label="REXML\nSource#match\n44 (2.2%)\r",shape=box,fontsize=15.4];
33
+ N30 [label="REXML\nChild#find_all\n37 (1.8%)\rof 40 (2.0%)\r",shape=box,fontsize=14.7];
34
+ N31 [label="Array#map\n2 (0.1%)\rof 36 (1.8%)\r",shape=box,fontsize=9.6];
35
+ N32 [label="Array#each\n7 (0.3%)\rof 33 (1.6%)\r",shape=box,fontsize=10.9];
36
+ N33 [label="REXML\nElement#document\n11 (0.5%)\rof 29 (1.4%)\r",shape=box,fontsize=11.7];
37
+ N34 [label="XmlSimple#has_mixed_content?\n3 (0.1%)\rof 29 (1.4%)\r",shape=box,fontsize=9.9];
38
+ N35 [label="REXML\nXPathParser#parse\n0 (0.0%)\rof 23 (1.1%)\r",shape=box,fontsize=8.0];
39
+ N36 [label="REXML\nParent#initialize\n17 (0.8%)\rof 22 (1.1%)\r",shape=box,fontsize=12.6];
40
+ N37 [label="Set#initialize\n2 (0.1%)\rof 22 (1.1%)\r",shape=box,fontsize=9.6];
41
+ N38 [label="XmlSimple#merge\n13 (0.6%)\rof 21 (1.0%)\r",shape=box,fontsize=12.0];
42
+ N39 [label="AWS\nBase#make_request\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
43
+ N40 [label="Net\nHTTP#request\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
44
+ N41 [label="Net\nHTTP#start\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
45
+ N42 [label="Net\nHTTPResponse#body\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
46
+ N43 [label="Net\nHTTPResponse#read_body\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
47
+ N44 [label="Net\nHTTPResponse#read_body_0\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
48
+ N45 [label="Net\nHTTPResponse#read_chunked\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
49
+ N46 [label="Net\nHTTPResponse#reading_body\n0 (0.0%)\rof 20 (1.0%)\r",shape=box,fontsize=8.0];
50
+ N47 [label="Net\nBufferedIO#read\n5 (0.2%)\rof 19 (0.9%)\r",shape=box,fontsize=10.5];
51
+ N48 [label="REXML\nText#initialize\n17 (0.8%)\rof 19 (0.9%)\r",shape=box,fontsize=12.6];
52
+ N49 [label="REXML\nElement#root\n18 (0.9%)\r",shape=box,fontsize=12.7];
53
+ N50 [label="REXML\nText.unnormalize\n16 (0.8%)\rof 18 (0.9%)\r",shape=box,fontsize=12.4];
54
+ N51 [label="REXML\nParent#each\n2 (0.1%)\rof 16 (0.8%)\r",shape=box,fontsize=9.6];
55
+ N52 [label="REXML\nParsers\nXPathParser#parse\n4 (0.2%)\rof 15 (0.7%)\r",shape=box,fontsize=10.2];
56
+ N53 [label="Net\nBufferedIO#rbuf_fill\n13 (0.6%)\rof 14 (0.7%)\r",shape=box,fontsize=12.0];
57
+ N54 [label="Object#timeout\n0 (0.0%)\rof 14 (0.7%)\r",shape=box,fontsize=8.0];
58
+ N55 [label="Timeout.timeout\n1 (0.0%)\rof 14 (0.7%)\r",shape=box,fontsize=9.1];
59
+ N56 [label="REXML\nParsers\nXPathParser#OrExpr\n2 (0.1%)\rof 11 (0.5%)\r",shape=box,fontsize=9.6];
60
+ N22 -> N50 [label=18, weight=7, style="setlinewidth(0.053071)"];
61
+ N13 -> N14 [label=911, weight=117, style="setlinewidth(2.000000)"];
62
+ N20 -> N7 [label=32, weight=11, style="setlinewidth(0.094349)"];
63
+ N21 -> N31 [label=36, weight=12, style="setlinewidth(0.106143)"];
64
+ N14 -> N13 [label=904, weight=117, style="setlinewidth(2.000000)"];
65
+ N7 -> N48 [label=19, weight=7, style="setlinewidth(0.056020)"];
66
+ N22 -> N33 [label=29, weight=10, style="setlinewidth(0.085504)"];
67
+ N44 -> N45 [label=20, weight=8, style="setlinewidth(0.058968)"];
68
+ N51 -> N32 [label=14, weight=6, style="setlinewidth(0.041278)"];
69
+ N16 -> N7 [label=43, weight=13, style="setlinewidth(0.126781)"];
70
+ N20 -> N36 [label=22, weight=8, style="setlinewidth(0.064865)"];
71
+ N7 -> N20 [label=81, weight=21, style="setlinewidth(0.238821)"];
72
+ N34 -> N28 [label=7, weight=3, style="setlinewidth(0.020639)"];
73
+ N15 -> N34 [label=29, weight=10, style="setlinewidth(0.085504)"];
74
+ N16 -> N29 [label=44, weight=14, style="setlinewidth(0.129730)"];
75
+ N27 -> N22 [label=44, weight=14, style="setlinewidth(0.129730)"];
76
+ N32 -> N26 [label=7, weight=3, style="setlinewidth(0.020639)"];
77
+ N25 -> N26 [label=54, weight=16, style="setlinewidth(0.159214)"];
78
+ N15 -> N17 [label=97, weight=24, style="setlinewidth(0.285995)"];
79
+ N26 -> N51 [label=10, weight=5, style="setlinewidth(0.029484)"];
80
+ N4 -> N3 [label=442, weight=71, style="setlinewidth(1.303194)"];
81
+ N54 -> N55 [label=14, weight=6, style="setlinewidth(0.041278)"];
82
+ N15 -> N23 [label=46, weight=14, style="setlinewidth(0.135627)"];
83
+ N45 -> N47 [label=19, weight=7, style="setlinewidth(0.056020)"];
84
+ N9 -> N8 [label=370, weight=62, style="setlinewidth(1.090909)"];
85
+ N7 -> N9 [label=370, weight=62, style="setlinewidth(1.090909)"];
86
+ N37 -> N7 [label=20, weight=8, style="setlinewidth(0.058968)"];
87
+ N55 -> N53 [label=13, weight=6, style="setlinewidth(0.038329)"];
88
+ N24 -> N27 [label=52, weight=15, style="setlinewidth(0.153317)"];
89
+ N11 -> N7 [label=77, weight=20, style="setlinewidth(0.227027)"];
90
+ N40 -> N46 [label=20, weight=8, style="setlinewidth(0.058968)"];
91
+ N21 -> N28 [label=38, weight=12, style="setlinewidth(0.112039)"];
92
+ N43 -> N44 [label=20, weight=8, style="setlinewidth(0.058968)"];
93
+ N5 -> N39 [label=20, weight=8, style="setlinewidth(0.058968)"];
94
+ N13 -> N15 [label=922, weight=118, style="setlinewidth(2.000000)"];
95
+ N10 -> N7 [label=370, weight=62, style="setlinewidth(1.090909)"];
96
+ N5 -> N4 [label=411, weight=67, style="setlinewidth(1.211794)"];
97
+ N15 -> N15 [label=892, weight=116, style="setlinewidth(2.000000)"];
98
+ N15 -> N12 [label=801, weight=107, style="setlinewidth(2.000000)"];
99
+ N17 -> N21 [label=76, weight=20, style="setlinewidth(0.224079)"];
100
+ N14 -> N35 [label=23, weight=8, style="setlinewidth(0.067813)"];
101
+ N30 -> N51 [label=6, weight=3, style="setlinewidth(0.017690)"];
102
+ N52 -> N56 [label=11, weight=5, style="setlinewidth(0.032432)"];
103
+ N39 -> N40 [label=20, weight=8, style="setlinewidth(0.058968)"];
104
+ N8 -> N11 [label=355, weight=60, style="setlinewidth(1.046683)"];
105
+ N2 -> N15 [label=137, weight=31, style="setlinewidth(0.403931)"];
106
+ N34 -> N23 [label=9, weight=4, style="setlinewidth(0.026536)"];
107
+ N39 -> N41 [label=20, weight=8, style="setlinewidth(0.058968)"];
108
+ N12 -> N13 [label=857, weight=113, style="setlinewidth(2.000000)"];
109
+ N11 -> N16 [label=107, weight=26, style="setlinewidth(0.315479)"];
110
+ N2 -> N10 [label=370, weight=62, style="setlinewidth(1.090909)"];
111
+ N19 -> N7 [label=91, weight=23, style="setlinewidth(0.268305)"];
112
+ N34 -> N24 [label=9, weight=4, style="setlinewidth(0.026536)"];
113
+ N15 -> N38 [label=21, weight=8, style="setlinewidth(0.061916)"];
114
+ N21 -> N22 [label=30, weight=10, style="setlinewidth(0.088452)"];
115
+ N53 -> N54 [label=14, weight=6, style="setlinewidth(0.041278)"];
116
+ N46 -> N42 [label=20, weight=8, style="setlinewidth(0.058968)"];
117
+ N31 -> N21 [label=34, weight=11, style="setlinewidth(0.100246)"];
118
+ N41 -> N39 [label=20, weight=8, style="setlinewidth(0.058968)"];
119
+ N23 -> N25 [label=55, weight=16, style="setlinewidth(0.162162)"];
120
+ N7 -> N37 [label=22, weight=8, style="setlinewidth(0.064865)"];
121
+ N3 -> N2 [label=469, weight=74, style="setlinewidth(1.382801)"];
122
+ N35 -> N52 [label=15, weight=6, style="setlinewidth(0.044226)"];
123
+ N47 -> N53 [label=14, weight=6, style="setlinewidth(0.041278)"];
124
+ N6 -> N5 [label=422, weight=68, style="setlinewidth(1.244226)"];
125
+ N32 -> N30 [label=3, weight=2, style="setlinewidth(0.008845)"];
126
+ N42 -> N43 [label=20, weight=8, style="setlinewidth(0.058968)"];
127
+ N33 -> N49 [label=18, weight=7, style="setlinewidth(0.053071)"];
128
+ N11 -> N18 [label=94, weight=24, style="setlinewidth(0.277150)"];
129
+ N28 -> N30 [label=40, weight=13, style="setlinewidth(0.117936)"];
130
+ N18 -> N19 [label=92, weight=23, style="setlinewidth(0.271253)"];
131
+ N15 -> N24 [label=46, weight=14, style="setlinewidth(0.135627)"];
193
132
  }