twingly-analytics 1.0.1

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.
@@ -0,0 +1,382 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.twingly.com/analytics/Analytics.ashx?documentlang=sv&key=api_key&searchpattern=spotify%20page-size:10&ts=&tsTo=&xmloutputversion=2
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ Host:
17
+ - api.twingly.com
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - nginx
25
+ Date:
26
+ - Thu, 30 Oct 2014 19:45:41 GMT
27
+ Content-Type:
28
+ - text/xml; charset=utf-8
29
+ Content-Length:
30
+ - '15298'
31
+ Connection:
32
+ - keep-alive
33
+ Cache-Control:
34
+ - private
35
+ Set-Cookie:
36
+ - SERVERID=web03; path=/
37
+ body:
38
+ encoding: ASCII-8BIT
39
+ string: !binary |-
40
+ PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48dHdpbmds
41
+ eWRhdGEgbnVtYmVyT2ZNYXRjaGVzUmV0dXJuZWQ9IjEwIiBzZWNvbmRzRWxh
42
+ cHNlZD0iMC4wNzUiIG51bWJlck9mTWF0Y2hlc1RvdGFsPSIzOTM0NyI+PHBv
43
+ c3QgY29udGVudFR5cGU9ImJsb2ciPg0KICA8dXJsPmh0dHA6Ly93d3cubWFj
44
+ Zm9ydW0uc2UvbGlicmF0b25lLWRpdmEtcGVwcGVyLWJsYWNrPC91cmw+DQog
45
+ IDx0aXRsZT48IVtDREFUQVtMaWJyYXRvbmUgRGl2YSBQZXBwZXIgQmxhY2td
46
+ XT48L3RpdGxlPg0KICA8c3VtbWFyeT48IVtDREFUQVtNw6VuZ2EgZXh0ZXJu
47
+ YSBow7ZndGFsYXJlIGzDpXRlciBiw6R0dHJlIMOkbiBkaW4gVFZzIGluYnln
48
+ Z2RhIGjDtmd0YWxhcmUuIFByb2JsZW1ldCDDpHIgYmFyYSBhdHQgZGUgZmxl
49
+ c3RhIGF2IGRlbSDDpHIgaGlza2xpZ2EgYXR0IHRpdHRhIHDDpS4gTWVkIExp
50
+ YnJhdG9uZSBEaXZhIFNvdW5kYmFyIGbDpXIgZHUgYsOlZGUgZXR0IGdyeW10
51
+ IGJyYSBsanVkIHNhbXQgZW4gbWFnaXNrIGRlc2lnbiBhdHQgdmlsYSDDtmdv
52
+ bmVuIHDDpS4gSW5uYW5mw7ZyIHNpdHQgdWxsYmVrbMOkZGRhIHNrYWwgZmlu
53
+ bmVyIGR1IGVuIDUtdHVtcyA3NVcgd29vZmVyLCB0dsOlIDUwVyAzLXR1bXMg
54
+ bWVsbGFucmVnaXN0ZXIgb2NoIHR2w6UgMjVXIGJhbmRiYXNlcmFkZSBkaXNr
55
+ YW50ZXIuIERpdmEgaGFyIMOkdmVuIHN0w7ZkIGbDtnIgU3BvdGlmeSBDb25u
56
+ ZWN0LCBBaXJwbGF5LCBETE5BIG9jaCBCbHVldG9vdGguDQoNCg0KDQoNCg0K
57
+ ICAgICAgICANCiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
58
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAg
59
+ ICAgICAgICBleGtsIG1vbXM6DQogICAgICAgICAgICAgICAgICAgIDXCoDkx
60
+ OSwyMMKga3INCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAN
61
+ CiAgICAgICAgICAgICAgICAgICAgSW5jbC4gVGF4Og0KICAgICAgICAgICAg
62
+ ICAgICAgICA3wqAzOTksMDDCoGtyXV0+PC9zdW1tYXJ5Pg0KICA8bGFuZ3Vh
63
+ Z2VDb2RlPnN2PC9sYW5ndWFnZUNvZGU+DQogIDxwdWJsaXNoZWQ+MjAxNC0x
64
+ MC0zMCAxODozMDoyNlo8L3B1Ymxpc2hlZD4NCiAgPGluZGV4ZWQ+MjAxNC0x
65
+ MC0wMyAwOTozMTozM1o8L2luZGV4ZWQ+DQogIDxibG9nVXJsPmh0dHA6Ly93
66
+ d3cubWFjZm9ydW0uc2UvcnNzL2NhdGFsb2cvbmV3L3N0b3JlX2lkLzE8L2Js
67
+ b2dVcmw+DQogIDxibG9nTmFtZT48IVtDREFUQVtOeWEgcHJvZHVrdGVyIGZy
68
+ w6VuIE1haW4gV2Vic2l0ZSBTdG9yZV1dPjwvYmxvZ05hbWU+DQogIDxhdXRo
69
+ b3JpdHk+MjwvYXV0aG9yaXR5Pg0KICA8YmxvZ1Jhbms+MTwvYmxvZ1Jhbms+
70
+ DQo8L3Bvc3Q+PHBvc3QgY29udGVudFR5cGU9ImJsb2ciPg0KICA8dXJsPmh0
71
+ dHA6Ly93d3cubmF0dHN0YWQuc2UvaGFsbG9uc3RydW1wYWFoP2lkPTE2MDI3
72
+ OTA3PC91cmw+DQogIDx0aXRsZT48IVtDREFUQVtza2FwYXIgZ2zDpGRqZS5d
73
+ XT48L3RpdGxlPg0KICA8c3VtbWFyeT48IVtDREFUQVtvbSBtYW4gaW50ZSBo
74
+ YXIgZXR0IHNraXQgYXR0IGfDtnJhLCDDpHIgcMOlIHNqdWt0IGTDpWxpZ3Qg
75
+ aHVtw7ZyIGVsbGVyIG7DpXR0IMOldCBkZSBow6VsbGV0IHPDpSBmaW5ucyBk
76
+ ZXQgYmFyYSBlbiBzYWsgc29tIHNrYXBhciB0aWxscsOkY2tsaWd0IG1lZCBn
77
+ bMOkZGplIGbDtnIgYXR0IG3DpSBmYWtraW5nIGJyYSBvY2ggZGV0IMOkciBt
78
+ dXNpaywgZGUgw6RyIGp1IHPDpSBicmEuwqAgamFnIGJqdWRlciBww6UgbsOl
79
+ Z3JhIGzDpXRhciBmcsOlbiBzcG90aWZ5IHPDpSBmw6VyIG5pIEhBQURFRUUu
80
+ wqAgcHVzcy7CoCBQb3AgUMOlIFN2ZW5za2EgYnkgQmrDtnJuIFJvc2Vuc3Ry
81
+ w7ZtXV0+PC9zdW1tYXJ5Pg0KICA8bGFuZ3VhZ2VDb2RlPnN2PC9sYW5ndWFn
82
+ ZUNvZGU+DQogIDxwdWJsaXNoZWQ+MjAxNC0xMC0zMCAxNzo1OToxOFo8L3B1
83
+ Ymxpc2hlZD4NCiAgPGluZGV4ZWQ+MjAxNC0xMC0zMCAxODo1OTo0MFo8L2lu
84
+ ZGV4ZWQ+DQogIDxibG9nVXJsPmh0dHA6Ly93d3cubmF0dHN0YWQuc2UvaGFs
85
+ bG9uc3RydW1wYWFoPC9ibG9nVXJsPg0KICA8YmxvZ05hbWU+PCFbQ0RBVEFb
86
+ TXkgZGF5cywgbXkgdGhvdWdodHMsIGZ1Y2tpbmcgZW5qb3kgIV1dPjwvYmxv
87
+ Z05hbWU+DQogIDxhdXRob3JpdHk+MTwvYXV0aG9yaXR5Pg0KICA8YmxvZ1Jh
88
+ bms+MTwvYmxvZ1Jhbms+DQo8L3Bvc3Q+PHBvc3QgY29udGVudFR5cGU9ImJs
89
+ b2ciPg0KICA8dXJsPmh0dHA6Ly9kYXlzb2ZhbmdpZS5ibG9nc3BvdC5jb20v
90
+ MjAxNC8xMC9lbGxpb3RzLWZvcnN0YS1vY2gtYW5kcmEtYXZzbHV0bmluZy5o
91
+ dG1sPC91cmw+DQogIDx0aXRsZT48IVtDREFUQVtFbGxpb3RzIGbDtnJzdGEg
92
+ b2NoIGFuZHJhIGF2c2x1dG5pbmddXT48L3RpdGxlPg0KICA8c3VtbWFyeT48
93
+ IVtDREFUQVtJZ8OlciB2YXIgc2lzdGEgZ8OlbmdlbiBww6UgYmFieW1hc3Nh
94
+ Z2VuIG1lZCBZdm9ubmUgcMOlIEtyw6VrYW4gaSBFbmvDtnBpbmcuIERhZ2Vu
95
+ IHRpbGwgw6RyYSBoYWRlIGhhbiBsaWthIG15Y2tldCBteXJvciBpIGJyYWxs
96
+ YW4gc29tIHZhbmxpZ3Qgb2NoIEZyZWRyaWsgdmFyIG1lZCBvY2tzw6UuIEVs
97
+ bGlvdCBoYWRlIGZpeGF0IGVuIGxpdGVuIHByZXNlbnQgb2NoIFl2b25uZSBi
98
+ bGV2IHPDpSBnbGFkLiBFbiBsanVzbHlrdGEgb2NoIGZsaW5nc2FsdCBpbnNs
99
+ YWdldCBpIGNlbGxvZmFucGxhc3QuIA0KIElkYWcgdmFyIGRlZyBkYWdzIGbD
100
+ tnIgeXR0ZXJsaWdhcmUgZW4gYXZzbHV0bmluZy4gRsO2csOkbGRyYWdydXBw
101
+ ZW4gaGFyIGhhZnQgc2luIHNpc3RhIHRyw6RmZi4gSWFmIHDDpSBCVkMsIGbD
102
+ tnIgamFnIHRyb3Igbm9nIHZpIGtvbW1lciBzZXMgaWdlbi4gRGVscyBww6Ug
103
+ YmFieWNhZsOpIHDDpSB0aXNkYWdhciBvY2ggc2VuIHNrYSB2aSBmw7Zyc8O2
104
+ a2Egc2VzIHDDpSB0b3JzZGFnYXIgw6RuZMOlLiBNeXNpZ3QhIQ0KIElkYWcg
105
+ aGFyIHZpIHRyw6RuYXQgcMOlIGF0dCBzb3ZhIHNqw6RsdiBvY2tzw6UuIDIg
106
+ Z8OlbmdlciBnaWNrIGRldC4gQ2EgMzAgb2NoIDQ1IG1pbnV0ZXIuIERldCB2
107
+ YXIganUgYnJhISEgSmEgZGV0IHZhciBqdSBtZXN0IEVsbGlvdCBzb20gc292
108
+ LCBzasOkbHYga8Oka2FkZSBqYWcgZW5hIGfDpW5nZW4gb2NoIGRlbiBhbmRy
109
+ YSBnw6VuZ2VuIGhhZGUgamFnIHZpc3N0IGbDpXR0IGxpdGUgbWrDtmxrc3Rv
110
+ Y2tuaW5nIGh1eGZsdXggb2NoIGZpY2sgc2l0dGEgbyBrbsOlZGEgb2NoIGbD
111
+ tnJzw7ZrYSBrbMOkbW1hIHVyIGxpdGUuIFNvbSB0dXIgdmFyIGhhZGUgamFn
112
+ IGludGUgb250IHV0YW4gZGV0IHZhciBiYXJhIHNvbSBlbiByaWt0aWd0IGjD
113
+ pXJkIHN0b3Iga27Dtmwgc29tIGxpbGxmaXNlbiBmaWNrIGhqw6RscGEgdGls
114
+ bCBhdHQgZsOlIGJvcnQgc8OlIGZvcnQgaGFuIHZha25hZGUuIE9jaCBkZXQg
115
+ ZnVua2FkZS4gVmlsa2VuIHR1ciEhIQ0KIEphZyB2aWxsIGTDpSB2ZXJycnJr
116
+ bGlnZW4gaW50ZSBoYSBzw6VuIGTDpHIgbWrDtmxrc3RvY2tuaW5nIG1hbiBo
117
+ w7ZydCBvbS4uLiBNYXJkcsO2bSEhIQ0KIFNlbiBzYXR0IGphZyBow6RyIG8g
118
+ ZnVuZGVyYWRlIGh1ciBqYWcgc2thIGbDpSBnb3NzZW4gbGl0ZSBtZXIgYXZz
119
+ bGFwcG5hZCBuw6RyIHZpIGfDtnIgbWFzc2FnZSBvY2ggaMOkbXRhZGUgZW4g
120
+ YnJhIHNraXZhIHDDpSBTcG90aWZ5LiBCYWJ5IGdlbml1cy4gS2xhc3Npc2sg
121
+ bXVzaWsuIFPDpSBudSBsaWdnZXIgbGlsbGlzIG9jaCBzb3bDpHRlciBvIGx5
122
+ c3NuYXIgcMOlIGRldC4gR3VsbGlndCEhIERldCBza2EganUgZnLDpG1qYSBo
123
+ asOkcm52ZXJrc2FtaGV0ZW4gcMOlIGJlYmlzYXIuIEhvcHBhcyBoYW4gYmxp
124
+ ciBsaXRlIHNtYXJ0YXJlIMOkbiBtYW1zZW4uLi5dXT48L3N1bW1hcnk+DQog
125
+ IDxsYW5ndWFnZUNvZGU+c3Y8L2xhbmd1YWdlQ29kZT4NCiAgPHB1Ymxpc2hl
126
+ ZD4yMDE0LTEwLTMwIDE2OjA1OjAwWjwvcHVibGlzaGVkPg0KICA8aW5kZXhl
127
+ ZD4yMDE0LTEwLTMwIDE3OjQyOjMzWjwvaW5kZXhlZD4NCiAgPGJsb2dVcmw+
128
+ aHR0cDovL2RheXNvZmFuZ2llLmJsb2dzcG90LmNvbS88L2Jsb2dVcmw+DQog
129
+ IDxibG9nTmFtZT48IVtDREFUQVtEYXlzIG9mIEFuZ2llXV0+PC9ibG9nTmFt
130
+ ZT4NCiAgPGF1dGhvcml0eT4wPC9hdXRob3JpdHk+DQogIDxibG9nUmFuaz4x
131
+ PC9ibG9nUmFuaz4NCjwvcG9zdD48cG9zdCBjb250ZW50VHlwZT0iYmxvZyI+
132
+ DQogIDx1cmw+aHR0cDovL3d3dy50cmF2ZWxwb2QuY29tL3RyYXZlbC1ibG9n
133
+ LWVudHJpZXMvamF1Z3VzdC8xNi8xNDE0NTQwODAwL3Rwb2QuaHRtbDwvdXJs
134
+ Pg0KICA8dGl0bGU+PCFbQ0RBVEFbQnJ5YW4gRmVycnkg4oCUIFN0b2NraG9s
135
+ bSwgU3ZlcmlnZV1dPjwvdGl0bGU+DQogIDxzdW1tYXJ5PjwhW0NEQVRBW0Jy
136
+ eWFuIEZlcnJ5IC0gU3RvY2tob2xtLCBTdmVyaWdlIA0KICAgICAgICAgICAg
137
+ DQogICAgICAgIA0KICAgICAgICBTdG9ja2hvbG0sIFN2ZXJpZ2UgIEzDpG1u
138
+ YWRlIEthcmxza29nYSB2aWQxNCB0aWRlbiwgZsO2ciBhdHQgYmVzw7ZrYSBU
139
+ YW50b2x1bmRlbiBpZ2VuLCBmw7ZyIGF0dCBzZSBvIGx5c3NuYSBww6UgQnJ5
140
+ YW4gRmVycnkgcMOlIFN0b2NraG9sbSBXYXRlcmZyb250LiBBbmzDpG5kZSB2
141
+ aWQgMTcuMzAsIHRvZyBldHQgZ2xhcyB2aW4gbyBlbiDDtmwgaW5uYW4gdmkg
142
+ Z2ljayBtb3QgWmlua2Vuc2RhbW0gVCBiYW5lc3RhdGlvbi4gTMOlbmcga8O2
143
+ IHV0YW5mw7ZyIFdhdGVyZnJvbnQsIHZpZCAxOS4zMC4gU2F0dCBsw6RuZ3N0
144
+ IGJhayBtZW4gc8OlZyDDpG5kw6UgZsO2cnbDpW5hbnN2w6RydCBicmEuIEbD
145
+ tnJzdGtsYXNzaWd0IGxqdWQuIEJyeWFuIEZlcnJ5IG1lZCBiYW5kIHZhciBw
146
+ cmVjaXMgc8OlIGJyYSBtYW4gaG9wcGFkZXMgcMOlLCBnYW1tYWx0IG8gbnl0
147
+ dCwgZW4gUm94eSBNdXNpYyBvIGVuIGRlbCBmcsOlbiBzb2xvcGxhdHRvcm5h
148
+ LiBLb25zZXJ0ZW4gc2x1dGFkZSAyMi4zMCwgaMO2bGwgcMOlIGtuYXBwYSAy
149
+ IHRpbW1hci4gw4V0IG9zdCBvIGRyYWNrIHZpbiB2aWQgaGVta29tc3QgdGls
150
+ bCBoYi4gU3BlbGFkZSBGZXJyeSBww6UgU3BvdGlmeS5dXT48L3N1bW1hcnk+
151
+ DQogIDxsYW5ndWFnZUNvZGU+c3Y8L2xhbmd1YWdlQ29kZT4NCiAgPHB1Ymxp
152
+ c2hlZD4yMDE0LTEwLTMwIDE1OjI2OjAwWjwvcHVibGlzaGVkPg0KICA8aW5k
153
+ ZXhlZD4yMDE0LTEwLTMwIDE2OjMwOjQyWjwvaW5kZXhlZD4NCiAgPGJsb2dV
154
+ cmw+aHR0cDovL3d3dy50cmF2ZWxwb2QuY29tL3N5bmRpY2F0aW9uL3Jzczwv
155
+ YmxvZ1VybD4NCiAgPGJsb2dOYW1lPjwhW0NEQVRBW1RyYXZlbFBvZC5jb20g
156
+ VHJhdmVsU3RyZWFt4oSiIOKAlCBSZWNlbnQgRW50cmllcyBhdCBUcmF2ZWxQ
157
+ b2QuY29tXV0+PC9ibG9nTmFtZT4NCiAgPGF1dGhvcml0eT4xMDI5PC9hdXRo
158
+ b3JpdHk+DQogIDxibG9nUmFuaz4xMDwvYmxvZ1Jhbms+DQogIDx0YWdzPg0K
159
+ ICAgIDx0YWc+PCFbQ0RBVEFbVHJhdmVsIEJsb2dzXV0+PC90YWc+DQogIDwv
160
+ dGFncz4NCjwvcG9zdD48cG9zdCBjb250ZW50VHlwZT0iYmxvZyI+DQogIDx1
161
+ cmw+aHR0cDovL2xpc2Fhc3ZhcmxkLmJsb2dnLnNlLzIwMTQvb2N0b2Jlci9l
162
+ bi1uYXR0LWRhLWFsbGEtbGp1cy1mb3JzdmFubi5odG1sPC91cmw+DQogIDx0
163
+ aXRsZT48IVtDREFUQVtFbiBuYXR0IGTDpSBhbGxhIGxqdXMgZsO2cnN2YW5u
164
+ Ll1dPjwvdGl0bGU+DQogIDxzdW1tYXJ5PjwhW0NEQVRBW0RldCDDpHIgaW50
165
+ ZSBvZnRhLCBtZW4gaWJsYW5kIHPDpSBow6RuZGVyIGRldCBhdHQgamFnIGx5
166
+ c3NuYXIgcMOlIHN2ZW5zayBtdXNpay4gSGFyIG7DpWdyYSBsw6V0YXIgc29t
167
+ IMOkciBleHRyYSBicmEganVzdCBudSAobsOlZ3JhIGzDpXRhciBzb20gc3Bl
168
+ bGFkZXMgbXlja2V0IGbDtnIgZXR0IHBhciDDpXIgc2VkYW4gb2NoIG7DpWdy
169
+ YSBueWFyZSkuIExhZGUgaWhvcCBkZW0gdGlsbCBkZW5uYSBsaXN0YSAoZ8Ol
170
+ ciDDpHZlbiBhdHQga2xpY2thIHDDpSBuw6Vnb24gYXYgYmlsZGVybmEpLiDD
171
+ hHIgaW50ZSBlbiBzw6UgbMOlbmcgbGlzdGEsIGp1c3QgYXYgZGVuIGFubGVk
172
+ bmluZ2VuIGF0dCBqYWcgaW50ZSBseXNzbmFyIHPDpSBteWNrZXQgcMOlIHN2
173
+ ZW5za3QgZMOlLiBGYXZvcml0ZW4gYXYgZGVtIMOkciBmw7ZyIHRpbGxmw6Rs
174
+ bGV0IFRob21hcyBTdGVuc3Ryw7ZtIChzb20gamFnIHPDpWcgbGl2ZSBmw7Zy
175
+ IG7DpWdyYSDDpXIgc2VkYW4gZMOlIGhhbiB2YXIgZsO2cmJhbmQgdGlsbCBH
176
+ YXZpbiBEZUdyYXcpLCBzcGVjaWVsbHQgRGlydHkgSGFycnkgb2NoIGVuIHR1
177
+ bmcgcmVmcsOkbmcgb2NoIEZvcmV2ZXIgWW91bmcgKGTDpHIgaW5sw6RnZ2V0
178
+ cyB0aXRlbCBrb21tZXIgaWZyw6VuKS5dXT48L3N1bW1hcnk+DQogIDxsYW5n
179
+ dWFnZUNvZGU+c3Y8L2xhbmd1YWdlQ29kZT4NCiAgPHB1Ymxpc2hlZD4yMDE0
180
+ LTEwLTMwIDE1OjAwOjAwWjwvcHVibGlzaGVkPg0KICA8aW5kZXhlZD4yMDE0
181
+ LTEwLTMwIDE2OjA0OjM2WjwvaW5kZXhlZD4NCiAgPGJsb2dVcmw+aHR0cDov
182
+ L2xpc2Fhc3ZhcmxkLmJsb2dnLnNlLzwvYmxvZ1VybD4NCiAgPGJsb2dOYW1l
183
+ PjwhW0NEQVRBW0xpc2FhcyB2w6RybGRdXT48L2Jsb2dOYW1lPg0KICA8YXV0
184
+ aG9yaXR5PjE8L2F1dGhvcml0eT4NCiAgPGJsb2dSYW5rPjE8L2Jsb2dSYW5r
185
+ Pg0KICA8dGFncz4NCiAgICA8dGFnPjwhW0NEQVRBW011c2lrXV0+PC90YWc+
186
+ DQogIDwvdGFncz4NCjwvcG9zdD48cG9zdCBjb250ZW50VHlwZT0iYmxvZyI+
187
+ DQogIDx1cmw+aHR0cDovL3d3dy5uYXR0c3RhZC5zZS9lbGluc2tvZ2x1bmQ/
188
+ aWQ9MTYwMjQ0OTA8L3VybD4NCiAgPHRpdGxlPjwhW0NEQVRBW3NoZSBrbm93
189
+ c11dPjwvdGl0bGU+DQogIDxzdW1tYXJ5PjwhW0NEQVRBW0jDtmcgbXVzaWsg
190
+ b2NoIGVuIG55IGZhdm9yaXQgbMOldCAoZWxsZXIgdmV0YXQgb20gZGVuIGkg
191
+ bsOlZ3JhIHZlY2tvciBudSkgw6RyIGLDpHN0YSBrb21ib24gaSB2w6RybGRl
192
+ bi4gVmlsa2VuIGzDpXQ/wqBKLiBDb2xlIOKAkyBTaGUgS25vd3MuIERldCBi
193
+ cnVrYXIgaW50ZSBow6RuZGEgYXR0IGphZyBmYXN0bmFyIGbDtnIgZW4gbMOl
194
+ dCBzb20gbWluIGtpbGxlIGdpbGxhci4gSmEgaGFuIGx5c3NuYXIgZW5kYXN0
195
+ IHDDpSByYXAvaGlwaG9wIHNvbSBpbnRlIGVucyBoYXIgbWVsb2RpIGkgc2ln
196
+ LiBNZW4gZGVubmEgdmFyIGZhbiByaWt0aWd0IGJyYSwgbWVsb2RpID0gUnl0
197
+ bS4gSSBsaWtlIGl0LiBTcGVjaWVsbHQgbsOkciBoYW4ga8O2ciBiaWwgc25h
198
+ YmJ0LCBow7Znc3RhIHZvbHltIG9jaCBkZXQgw6RyIGZyZWRhZy4gRMOlIGZp
199
+ bm5zIGRldCBpbmdhIHByb2JsZW0gaSB2w6RybGRlbiwganVzdCBpIGRlbiBz
200
+ dHVuZGVuLsKgIERlbm5hIGRhZyBoYXIgc3BlbmRlcmF0cyBob3Mga2lsbGVu
201
+ LiBIYW4gaGFyIHBsdWdnYXQgb2NoIGphZyBoYXIgYmFyYSB0YWdpdCBkZXQg
202
+ bHVnbnQuIEludGUgZW5zIHTDpG5rdCBww6UgYmxvZ2dlbiwgc8OlIHR5dsOk
203
+ cnIgaGFyIGphZyBpbmdlbiB2ZXR0aWcgdXJzw6RrdC4gVG9yc2RhZ2FyIMOk
204
+ ciB2w6RsZGlndCBzbGFwcGEgZsO2ciBtaWcuIEfDtnIgaW50ZSBzcGVjaWVs
205
+ bHQgbXlja2V0IG9jaCB2aWxhciBiYXJhIHV0IG1pZy4gw4RyIGhlbW1hIG51
206
+ IGkgYWxsYSBmYWxsIG9jaCBza2Egc25hcnQgaXbDpGcgb2NoIMO2dm5pbmdz
207
+ a8O2cmEgbWVkIG1hbW1hLiBWYWQgc2thIHZpIMO2dmEgcMOlIGlkYWc/IEkg
208
+ bcOlbmRhZ3Mga8O2cmRlIGphZyBww6UgZW4gc3RvbHBlIHPDpSBiaWxlbiDD
209
+ pHIgbGl0ZSBtb3NhZC4gTWVuIHPDpWRhbnQgc29tIGjDpG5kZXIsIGRlIHZl
210
+ dCB2aSBhbGxhLi4uIFPDpSBqYWcgc2thIG5vZyBpbnRlIMO2dmEgcMOlIGF0
211
+ dCBiYWNrYSBpIGVuIG3DtnJrIGdyw6RuZCBpZ2VuLiBEZXQga8Okbm5zIGxp
212
+ dGUgZmFybGlndC4gVHVyIGF0dCBtYW1tYSDDpHIgZsO2cnN0w6VlbmRlLCBo
213
+ b24gaGFyIG9ja3PDpSBza2FwYXQgbGl0ZSBidWNrbG9yIHDDpSBiaWxlbiBp
214
+ IGhlbm5lcyBkYXIuIE51IHNrYSBqYWcgc2thZmZhIG1pZyBldHQgbGl2LiBQ
215
+ dXNzIV1dPjwvc3VtbWFyeT4NCiAgPGxhbmd1YWdlQ29kZT5zdjwvbGFuZ3Vh
216
+ Z2VDb2RlPg0KICA8cHVibGlzaGVkPjIwMTQtMTAtMzAgMTQ6NTY6MjBaPC9w
217
+ dWJsaXNoZWQ+DQogIDxpbmRleGVkPjIwMTQtMTAtMzAgMTU6NTY6MzBaPC9p
218
+ bmRleGVkPg0KICA8YmxvZ1VybD5odHRwOi8vd3d3Lm5hdHRzdGFkLnNlL2Vs
219
+ aW5za29nbHVuZDwvYmxvZ1VybD4NCiAgPGJsb2dOYW1lPjwhW0NEQVRBW0Vs
220
+ aW4gU2tvZ2x1bmRdXT48L2Jsb2dOYW1lPg0KICA8YXV0aG9yaXR5PjUwPC9h
221
+ dXRob3JpdHk+DQogIDxibG9nUmFuaz41PC9ibG9nUmFuaz4NCjwvcG9zdD48
222
+ cG9zdCBjb250ZW50VHlwZT0iYmxvZyI+DQogIDx1cmw+aHR0cDovL3ByaWNr
223
+ LmJsb2dnLnNlLzIwMTQvb2N0b2Jlci9ob3N0bHVmdC5odG1sPC91cmw+DQog
224
+ IDx0aXRsZT48IVtDREFUQVtIw7ZzdGx1ZnRdXT48L3RpdGxlPg0KICA8c3Vt
225
+ bWFyeT48IVtDREFUQVtGcm9zdCBww6UgYmlscnV0b3JuYSwgZW4gc2FrdGEg
226
+ c3RpZ2FuZGUgc29sIG9jaCBwcmFzc2xpZ2EgbMO2diB1bmRlciBmw7Z0dGVy
227
+ bmEuIE7DpHIgaMO2c3RlbiDDpHIgc8OlIGjDpHIgw6RyIGRlbiBtYWdpc2su
228
+ IETDpHJmw7ZyIGhhciBqYWcgc2F0dCBzYW1tYW4gZW4gbGl0ZW4gc3BlbGxp
229
+ c3RhIG1lZCBsw6V0YXIgc29tIHBhc3NhciBicmEgYXR0IGx5c3NuYSBww6Ug
230
+ aSBtb3RsanVzcHJvbWVuYWRlciBww6V2w6RnIHRpbGwgdHVubmVsYmFuYW4s
231
+ IHDDpSBrdsOkbGxlbiBuw6RyIGRldCBtw7Zya25hdCBvY2ggbWFuIHTDpG50
232
+ IGxqdXMgZWxsZXIgZW4ga3JlYXRpdiBlZnRlcm1pZGRhZyBww6Uga29udG9y
233
+ ZXQuIERldCDDpHIgZW4gYmxhbmRuaW5nIGF2IG55YSBvY2ggbGl0ZSDDpGxk
234
+ cmUgbMOldGFyIG9jaCBtZXN0YWRlbHMgbXVzaWsgZnLDpW4gc3ZlbnNrYSBh
235
+ cnRpc3Rlci4gSMOkciBoaXR0YXIgbmnCoGjDtnN0bHVmdC4NCsKgDQpTcGVs
236
+ bGlzdGE6IDEuIFZhbmNlIEpveSAtIFBsYXkgV2l0aCBGaXJlIDIuIFZlcm9u
237
+ aWNhIE1hZ2dpbyAtIEzDpXRzYXMgc29tIGRldCByZWduYXIgKEphcmx5IFJl
238
+ bWl4KSAzLiBUaG9tYXMgU3RlbnN0csO2bSAtIE7DpHIgYWxsdGluZyBmYWxs
239
+ ZXIgNC4gU2VpbmFibyBTZXkgLSBZb3UgNS4gU3RlZ2V0IC0gU8OlbmEgc29t
240
+ IGR1IDYuIFRvbWFzIEFuZGVyc3NvbiBXaWogLSBMw6VuZ3NhbW1hIGRhZ2Fy
241
+ IGkgU3RvY2tob2xtIDcuIEFubmEgVGVybmhlaW0gLSBMaXR0bGUgTGllcyA4
242
+ LiBIZWxsbyBTYWZlcmlkZSAtIFJvY2t5IDkuIEFuZSBCcnVuIC0gV29yZHMg
243
+ MTAuIFNwb3J0c21hbiAtIEJlZ2luIEFnYWluIDExLiBKb25hdGhhbiBKb2hh
244
+ bnNzb24gLSBOeS9TbsO2IDEyLiBKZXNzaWUgV2FyZSAtIFdhbnQgWW91ciBG
245
+ ZWVsaW5nIDEzLiBMaW5uZWEgT2xzc29uIC0gV2hhdCAxNC4gQmVhdHJpY2Ug
246
+ RWxpIC0gRGllIEFub3RoZXIgRGF5IDE1LiBBZHJpYW4gTW9kaWdnw6VyZCAt
247
+ IE9tIGludGUgZHUgdmlsbCBoYSBtaWddXT48L3N1bW1hcnk+DQogIDxsYW5n
248
+ dWFnZUNvZGU+c3Y8L2xhbmd1YWdlQ29kZT4NCiAgPHB1Ymxpc2hlZD4yMDE0
249
+ LTEwLTMwIDE0OjUwOjAwWjwvcHVibGlzaGVkPg0KICA8aW5kZXhlZD4yMDE0
250
+ LTEwLTMwIDE3OjI0OjEyWjwvaW5kZXhlZD4NCiAgPGJsb2dVcmw+aHR0cDov
251
+ L3ByaWNrLmJsb2dnLnNlLzwvYmxvZ1VybD4NCiAgPGJsb2dOYW1lPjwhW0NE
252
+ QVRBW0p1bGlhIC0gYWxsdGlkIG1pdHQgaSBwcmlja11dPjwvYmxvZ05hbWU+
253
+ DQogIDxhdXRob3JpdHk+ODA8L2F1dGhvcml0eT4NCiAgPGJsb2dSYW5rPjY8
254
+ L2Jsb2dSYW5rPg0KICA8dGFncz4NCiAgICA8dGFnPjwhW0NEQVRBW011c2lr
255
+ XV0+PC90YWc+DQogIDwvdGFncz4NCjwvcG9zdD48cG9zdCBjb250ZW50VHlw
256
+ ZT0iYmxvZyI+DQogIDx1cmw+aHR0cDovL3d3dy5uYXR0c3RhZC5zZS9GaXRu
257
+ ZXNzanVsaWE/aWQ9MTYwMjQyNzk8L3VybD4NCiAgPHRpdGxlPjwhW0NEQVRB
258
+ W0ZpdG5lc3NqdWxpYTogQmxldiBzZW50aW1lbnRhbCAtIGdhbWxhIGJpbGRl
259
+ ciFdXT48L3RpdGxlPg0KICA8c3VtbWFyeT48IVtDREFUQVtTaXR0ZXIganVz
260
+ dCBudSBtZWQgTsOkcmluZ3Nsw6RyYW4gaSBrbsOkdCBvY2ggZ251Z2dhciBt
261
+ aW5hIHRpbm5pbmdhciBmw7ZyIGF0dCBmw7Zyc8O2a2EgZsOlIG1pZyBhdHQg
262
+ dHJ5Y2thIGluIGFsbCBpbmZvcm1hdGlvbi4gSmFnIHR5Y2tlciBzasOkbHYg
263
+ YXR0IGphZyBnam9ydCBhbGx0IGphZyBrdW5uYXQgaWRhZyBmw7ZyIGF0dCBm
264
+ w6UgdXQgc8OlIG15Y2tldCBzb20gbcO2amxpZ3QgYXYgZGVubmEgZGFncyBz
265
+ asOkbHZzdHVkaWVyLiBGw7ZyIGF0dCBpbnRlIGRydW5rbmEgaSB0ZXh0IGhh
266
+ ciBqYWcgaSBlbWVsbGFuw6V0IGRpc2thdCwgc3TDpGRhdCBsw6RnZW5oZXRl
267
+ biwgYsOkZGRhdCwgZ8OlciB1dCBtZWQgc29wb3IsIGvDpGxsc29ydGVyYXQg
268
+ b3N2Li4uIGphIG5pIHZldCBqdSBzasOkbHZhIGF0dCBwcmVjaXMgQUxMVCB2
269
+ ZXJrYXIgcm9saWdhcmUgw6RuIHNqw6RsdmEgcGx1Z2dhbmRldCA7KSBTcGVj
270
+ aWVsbHQgbnUgbsOkciBqYWcgZmx5dHRhdCBoZW1pZnLDpW4gZmlubnMgaSBw
271
+ cmluY2lwIE1BU1NBIE1FUiBzYWtlciBhdHQgZGlzdHJhaGVyYSBtaXR0IHBs
272
+ dWdnIG1lZC4uLiB3aWhvIDspwqAgTWVuIGh1ciBzb20gaGVsc3QsLi4gbnUg
273
+ bsOkciBqYWcgZMOlIHNpdHRlciBow6RyIG9jaCBwbHVnZ2FyIGhhciBqYWcg
274
+ w6R2ZW4gcMOlIHNwb3RpZnkgc2FtdGlkaWd0LCBvY2ggcGzDtnRzbGlndCBr
275
+ b21tZXIgIlJhZGlvYWN0aXZlIC0gSW1hZ2luZSBEcmFnb25zIiBww6Ugb2No
276
+ IGTDpSBzdGFubmFyIGphZyBwbMO2dHNsaWd0IHVwcCBvY2gga8Okbm5lciBo
277
+ dXIgbXlja2V0IGphZyBmeWxscyBtZWQga8OkbnNsb3IuLiBkZW5uYSBsw6V0
278
+ ZXIgw6RyIChlbGxlciBzbmFyYXJlIHZhcikgbsOkbWxpZ2VuIG1pbiB1bHRp
279
+ bWF0YSB0csOkbmluZ3Nsw6V0IGbDtnJyLi4uIEphZyBseXNzbmFkZSBBTExU
280
+ SUQgcMOlIGRlbiBuw6RyIGphZyB0csOkbmFkZSBiZW4gb2NoIGvDpG1wYWRl
281
+ IG1lZCB2aWt0ZXJuYSBmw7ZyIGF0dCBrdW5uYSBibGkgc3TDtnJyZSwgZsOl
282
+ IG1lciBydW1wYSBvY2ggcHJlc3RlcmEgYnJhLsKgIEphZyBmw7ZkZGVzIGp1
283
+ IGkgcHJpbmNpcCBoZWx0IHV0YW4gcnVtcGEgKGhhaGEpIG1pbmEgYmFybmRv
284
+ bXN2w6RubmVyIGthbiBnYXJhbnRlcmEgYXR0IGRlbiBnaWNrIElOw4VULi4g
285
+ dXRhbiDDtnZlcmRyaWZ0Li4gbWVuIGVuIGRhZyBiZXN0w6RtZGUgamFnIG1p
286
+ ZyBmw7ZyIGF0dCDDpG5kcmEgcMOlIGRlbiBzYWtlciBvY2ggdMOkdmxhIGkg
287
+ YmlraW5pIC1vY2ggc8OlIHZhciBkZXQgbWVkIGRldCEgSMOlcnQgc2xpdCwg
288
+ b8OkbmRsaWd0IG3DpW5nYSBiZW5wYXNzIG9jaCBteWNrZXQgw7Z2bmluZyBz
289
+ ZW5hcmUgaGFyIGphZyBrb21taXQgbsOkcm1hcmUgbWl0dCBtw6VsIG9jaCBw
290
+ w6UgbcOlbmRhZyBiw7ZyamFyIG1pbiBkaWV0IC1JTkbDllIgVMOEVkxJTkdF
291
+ Ti4gSMOkciDDpHIgamFnIG51Li4gw6RudGxpZ2VuIcKgIEphZyBibGV2IG90
292
+ cm9saWd0IHNlbnRpbWVudGFsIG7DpHIgamFnIGx5c3NuYWRlIHDDpSBkZW5u
293
+ YSBsw6V0ZW4uLiBzZXIgdmVya2xpZ2VuIG1pZyBzasOkbHYgaHVyIGphZyBi
294
+ ZXQgaWhvcCBkw6RyIHDDpSBOb3JkaWMgV2VsbG5lc3MgaSBhbGluZ3PDpXMs
295
+ IGxhc3RhZGUgcMOlIHPDpSBteWNrZXQgdmlrdCBpIGJlbnByZXNzZW4gc29t
296
+ IGphZyBiYXJhIHbDpWdhZGUgb2NoIGbDtnJzw7ZrdGUgZ2Vub21mw7ZyYSBt
297
+ aW5hIHByZXNzYXIuIE1pbm5zIG9ja3PDpSBodXIgYXJnIGphZyB2YXIgZsO2
298
+ ciBhdHQgZGV0IGdpY2sgc8OlIGzDpW5nc2FtdCBtZWQgdXR2ZWNrbGluZ2Vu
299
+ IChkZXQgdmFyIHDDpSBkZW4gdGlkZW4gamFnIHZhciAicsOkZGQiIGbDtnIg
300
+ a29saHlkcmF0ZXIuLiBpbmdldCBhdHQgc2tyYXR0YSDDpXQgZG9jaywgbWFu
301
+ IGzDpHIgc2lnIG1lZCB0aWRlbiBodXIgZW5zIGtyb3BwIGZ1bmdlcmFyISnC
302
+ oCAgSmFnIGvDpG5uZXIgbnUsIG1pdHQgaSBhbGx0LCBodXIgdGFja3NhbSBq
303
+ YWcgw6RyIGbDtnIgbWluIHJlc2Egc8OlaMOkciBsw6VuZ3Qgb2NoIGh1ciBz
304
+ cMOkbm5hbmRlIGRldCBza2EgYmxpIG1lZCBmcmFtdGlkYSDDpHZlbnR5ci4u
305
+ IGRldCDDpHIgbnUgZGV0IHJvbGlnYSBiw7ZyamFyIGVnZW50bGlnZW4gOykg
306
+ w6R2ZW4gb20gYWxsYSBmw7ZyYmVyZWRlbHNlciBww6Vsw6RnZ2VuIGhpdCBo
307
+ YXIgdmFyaXQgbsO2ZHbDpG5kaWdhIG9jaCBmeWxsZGEgbWVkIGdsw6RkamUg
308
+ w6RyIGRldCBudSBzbmFydCBkYWdzIGF0dCBnw7ZyYSBkZXQgamFnIHZlcmts
309
+ aWdlbiBkcsO2bXQgb20uLi4gYmlraW5pIGZpdG5lc3MuLiB0w6R2bGEuLi4g
310
+ w6XDpcOlIcKgc25hcnQgc8OlLi4hwqAgTWVuIGFsbGEgaGFyIGLDtnJqYXQg
311
+ bsOlZ29uc3RhbnMgb2NoIHZhcmplIHBhc3MgdGFyIGVuIGxpaWlpaXRlIG7D
312
+ pHJtYXJlIHNpdHQgbcOlbCBvY2ggc2luYSBkcsO2bW1hci4gSmFnIMOkbHNr
313
+ YXIgZGV0IGphZyBnw7ZyIHZlcmtsaWdlbiBvY2ggZGV0IMOkciBzw6UgZGV0
314
+ IHNrYWxsIHZhcmEgKMOkdmVuIG9tIGRldCB2ZXJrbGlnZW4gSU5URSBhbGx0
315
+ aWQgw6RyIHJvbGlndCkgbWVuIGkgc2x1dMOkbmRhbiBza2EgbWFuIGfDtnJh
316
+ IGRldCBzb20gZsOlciBlbiBhdHQgYmxpIGx5Y2tsaWchICBBIGxpdHRsZSB3
317
+ YWxrIGRvd27CoG1lbW9yeSBsYW5lIDspICAgICAgSGFyIGFsbHQgYmxpdml0
318
+ IGxpdGXCoHV0dmVja2xpbmcgcMOlIG1pbiBrcm9wcCEgOynCoCAgVHlja2Vy
319
+ IHZlcmtsaWdlbiBkZXQgc2thbGwgYmxpIFPDhSBPVFJPTElHVCBTUMOETk5B
320
+ TkRFIGF0dCBzZSBodXIga3JvcHBlbiBrb21tZXIgc2UgdXQgdW5kZXIgYWxs
321
+ dCDDtnZlcmZsw7ZkIHNvbSBrb21taXQgbnUgcMOlIG1pbiBvZmZzZWFzb24g
322
+ OykgbMOkbmd0YXIgdGlsbHMgZm9ybWVuIGtvbW1lci4uLi4uIGtvbW1lciBm
323
+ w7ZyaG9wcG5pbmdzdmlzIGJsaSBzdG9yc2xhZ2V0IV1dPjwvc3VtbWFyeT4N
324
+ CiAgPGxhbmd1YWdlQ29kZT5zdjwvbGFuZ3VhZ2VDb2RlPg0KICA8cHVibGlz
325
+ aGVkPjIwMTQtMTAtMzAgMTQ6NDU6MzNaPC9wdWJsaXNoZWQ+DQogIDxpbmRl
326
+ eGVkPjIwMTQtMTAtMzAgMTU6NDU6NDhaPC9pbmRleGVkPg0KICA8YmxvZ1Vy
327
+ bD5odHRwOi8vd3d3Lm5hdHRzdGFkLnNlL0ZpdG5lc3NqdWxpYTwvYmxvZ1Vy
328
+ bD4NCiAgPGJsb2dOYW1lPjwhW0NEQVRBW01pbiB2w6RnIHRpbGwgRml0bmVz
329
+ c2tyb3BwZW5dXT48L2Jsb2dOYW1lPg0KICA8YXV0aG9yaXR5PjMwPC9hdXRo
330
+ b3JpdHk+DQogIDxibG9nUmFuaz40PC9ibG9nUmFuaz4NCjwvcG9zdD48cG9z
331
+ dCBjb250ZW50VHlwZT0iYmxvZyI+DQogIDx1cmw+aHR0cDovL2NhbG1yaWRn
332
+ ZS5ibG9nc3BvdC5jb20vMjAxNC8xMC9seXNzbmEtcGEtYW5nZWxzLW9yLWtp
333
+ bmdzLWRlYnV0YWxidW0uaHRtbDwvdXJsPg0KICA8dGl0bGU+PCFbQ0RBVEFb
334
+ THlzc25hIHDDpSBBbmdlbHMgT3IgS2luZ3MgZGVidXRhbGJ1bV1dPjwvdGl0
335
+ bGU+DQogIDxzdW1tYXJ5PjwhW0NEQVRBW0RldCBtZWxvZGnDtnNhIHJvY2ti
336
+ YW5kZXQgQW5nZWxzIE9yIEtpbmdzIHNsw6RwcHRlIG55bGlnZW4gc2l0dCBk
337
+ ZWJ1dGFsYnVtICJLaW5ncyBvZiBOb3doZXJlIiwgc29tIG51IGZpbm5zIHRp
338
+ bGxnw6RuZ2xpZ3QgdmlhIGJsYW5kIGFubmF0IFNwb3RpZnkuXV0+PC9zdW1t
339
+ YXJ5Pg0KICA8bGFuZ3VhZ2VDb2RlPnN2PC9sYW5ndWFnZUNvZGU+DQogIDxw
340
+ dWJsaXNoZWQ+MjAxNC0xMC0zMCAxNDo0MTowMFo8L3B1Ymxpc2hlZD4NCiAg
341
+ PGluZGV4ZWQ+MjAxNC0xMC0zMCAxNjo1NTo1Nlo8L2luZGV4ZWQ+DQogIDxi
342
+ bG9nVXJsPmh0dHA6Ly9jYWxtcmlkZ2UuYmxvZ3Nwb3QuY29tLzwvYmxvZ1Vy
343
+ bD4NCiAgPGJsb2dOYW1lPjwhW0NEQVRBW0RlbiBtZWxvZGnDtnNhIGJsb2dn
344
+ ZW5dXT48L2Jsb2dOYW1lPg0KICA8YXV0aG9yaXR5PjMyPC9hdXRob3JpdHk+
345
+ DQogIDxibG9nUmFuaz40PC9ibG9nUmFuaz4NCjwvcG9zdD48cG9zdCBjb250
346
+ ZW50VHlwZT0iYmxvZyI+DQogIDx1cmw+aHR0cDovL3d3dy5uYXR0c3RhZC5z
347
+ ZS9CZWxsYXJpZWNoZW4/aWQ9MTYwMjQwMjU8L3VybD4NCiAgPHRpdGxlPjwh
348
+ W0NEQVRBW3N2YXIrXV0+PC90aXRsZT4NCiAgPHN1bW1hcnk+PCFbQ0RBVEFb
349
+ VmFydCBoYXIgZHUga8O2cHQgaGFsc2R1a2VuPyBKw6R0dGVmaW4hwqAgDQoJ
350
+ LSBIYWxzZHVrZW4gaGFyIGphZyBrw7ZwdCBww6UgbGluZGV4IGbDtnIgbsOl
351
+ Z29uIG3DpW5hZCBzZW4gYmFyYSwgc8OlIHRyb3IgYXR0IGRlbiBza2EgZmlu
352
+ bmFzIGt2YXIuIEtvbGxhIGTDpHIgZWxsZXIgcMOlIGRlcmFzIGhlbXNpZGHC
353
+ oEjDhFIuwqBLcmFtwqAgDQoJIA0KCVZpbGtlbiBmw6RyZyBww6UgdWdncyBo
354
+ YWRlIGR1IHZhbHQgYXR0IGvDtnBhIGkgw6VyPyBIYWRlIGR1IHZhbHQgbWVs
355
+ bGFuaMO2Z2EgbW9kZWxsZW4sIGVsbGVyIGzDpWdhPyBUYWNrc2FtIGbDtnIg
356
+ c3ZhciEgDQoJLSBKYWcgaGFkZSBub2cgdmFsdCBhdHQga8O2cGEgZXR0IHBh
357
+ ciBsw6VnYSB1Z2dzIGp1c3QgZsO2ciBhdHQgamFnIHJlZGFuIGhhciBldHQg
358
+ cGFyIG1lbGxhbmjDtmdhIGkgYnJ1bnQuIETDpSBoYWRlIGphZyB2ZWxhdCBr
359
+ w7ZwYSBldHQgcGFyIGdyw6VhIGVsbGVyIHN2YXJ0YSBsw6VnYS4gTWVuIG9t
360
+ IGR1IGludGUgaGFyIGV0dCBwYXIgbWVsbGFuaMO2Z2EgcmVkYW4gc8OlIHNr
361
+ dWxsZSBqYWcgbm9nIHJla29tbWVuZGVyYSBhdHQgZHUga8O2cHRlIHPDpW5h
362
+ IGbDtnJzdCB0ZXggaSBtw7Zya2JydW50LiBKdXN0IGbDtnIgYXR0IG7DpHIg
363
+ ZGV0IMOkciBow7ZnIHNuw7Ygc8OlIMOkciBkZXQgbWVyIHByYWt0aXNrdCBh
364
+ dHQgaGEgbWVsbGFuaMO2Z2EgdWdncy4gS3JhbSANCgkgDQoJIA0KCUhlaiEg
365
+ S2FuIGR1IGludGUgbMOkbmthIGRpbiBzcG90aWZ5PyBFbGxlciBpYWxsYWZh
366
+ bGwgbsOkbW5hIG7DpWdyYSBicmEgZmVzdCBsw6V0YXIgOkQgDQoJLUpvIGRl
367
+ dCBrYW4gamFnIGfDtnJhLiBKYWcgZml4YWRlIGlob3AgZW4gbGl0ZW4gInBh
368
+ cnR5IGxpc3RhIHDDpSBzcG90aWZ5IG1lZCBuw6VncmEgYnJhIGZlc3QgbMOl
369
+ dGFyLCBzZW4gbMOkbmthciBqYWcgw6R2ZW4gbWluIHZhbmxpZ2EgbGlzdGE6
370
+ IA0KTWluIHZhbmxpZ2Egc3BvdGlmeWxpc3RhICAgICAgICAgICAgICAgICAg
371
+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEjD
372
+ pHIgZmlubnMgZGV0IGVuIGRlbCBwYXJ0eSBsw6V0YXIgOy0pXV0+PC9zdW1t
373
+ YXJ5Pg0KICA8bGFuZ3VhZ2VDb2RlPnN2PC9sYW5ndWFnZUNvZGU+DQogIDxw
374
+ dWJsaXNoZWQ+MjAxNC0xMC0zMCAxNDoxODowMFo8L3B1Ymxpc2hlZD4NCiAg
375
+ PGluZGV4ZWQ+MjAxNC0xMC0zMCAxNToyMDoxOVo8L2luZGV4ZWQ+DQogIDxi
376
+ bG9nVXJsPmh0dHA6Ly93d3cubmF0dHN0YWQuc2UvQmVsbGFyaWVjaGVuPC9i
377
+ bG9nVXJsPg0KICA8YmxvZ05hbWU+PCFbQ0RBVEFbQmVsbGFyaWVjaGVuXV0+
378
+ PC9ibG9nTmFtZT4NCiAgPGF1dGhvcml0eT40PC9hdXRob3JpdHk+DQogIDxi
379
+ bG9nUmFuaz4xPC9ibG9nUmFuaz4NCjwvcG9zdD48L3R3aW5nbHlkYXRhPg==
380
+ http_version:
381
+ recorded_at: Thu, 30 Oct 2014 19:45:41 GMT
382
+ recorded_with: VCR 2.6.0
@@ -0,0 +1,43 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.twingly.com/analytics/Analytics.ashx?documentlang=&key=wrong&searchpattern=something&ts=&tsTo=&xmloutputversion=2
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ Host:
17
+ - api.twingly.com
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - nginx
25
+ Date:
26
+ - Thu, 30 Oct 2014 19:45:41 GMT
27
+ Content-Type:
28
+ - text/xml; charset=utf-8
29
+ Content-Length:
30
+ - '183'
31
+ Connection:
32
+ - keep-alive
33
+ Cache-Control:
34
+ - private
35
+ Set-Cookie:
36
+ - SERVERID=web01; path=/
37
+ body:
38
+ encoding: UTF-8
39
+ string: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><blogstream xmlns=\"http://www.twingly.com\">\r\n
40
+ \ <operationResult resultType=\"failure\">The API key does not exist.</operationResult>\r\n</blogstream>"
41
+ http_version:
42
+ recorded_at: Thu, 30 Oct 2014 19:45:41 GMT
43
+ recorded_with: VCR 2.6.0
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ include Twingly::Analytics
4
+
5
+ describe Parser do
6
+ it { should respond_to(:parse) }
7
+
8
+ let(:document) { File.read('spec/fixtures/valid_result.xml') }
9
+
10
+ describe "#parse" do
11
+ subject { Parser.new.parse(document) }
12
+ it { should be_a Result }
13
+ end
14
+ end
data/spec/post_spec.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ include Twingly::Analytics
4
+
5
+ describe Post do
6
+ it { should respond_to :url }
7
+ it { should respond_to :title }
8
+ it { should respond_to :summary }
9
+ it { should respond_to :language_code }
10
+ it { should respond_to :indexed }
11
+ it { should respond_to :published }
12
+ it { should respond_to :blog_url }
13
+ it { should respond_to :blog_name }
14
+ it { should respond_to :authority }
15
+ it { should respond_to :blog_rank }
16
+ it { should respond_to :tags }
17
+ end
@@ -0,0 +1,110 @@
1
+ require 'spec_helper'
2
+ require 'vcr_setup'
3
+
4
+ include Twingly::Analytics
5
+
6
+ describe Query do
7
+
8
+ it "BASE_URL should be parsable" do
9
+ expect(URI(Query::BASE_URL).to_s).to eq(Query::BASE_URL)
10
+ end
11
+
12
+ context "without client" do
13
+ subject { Query.new }
14
+ it "should not work" do
15
+ expect { subject }.to raise_error(ArgumentError)
16
+ end
17
+ end
18
+
19
+ before(:each) do
20
+ @client = double('client')
21
+ allow(@client).to receive(:api_key).and_return('api_key')
22
+ end
23
+
24
+ subject { Query.new(@client) }
25
+
26
+ it { should respond_to(:pattern) }
27
+ it { should respond_to(:language) }
28
+ it { should respond_to(:start_time) }
29
+ it { should respond_to(:end_time) }
30
+ it { should respond_to(:execute) }
31
+ it { should respond_to(:client) }
32
+
33
+ describe "#url" do
34
+ let(:query) { Query.new(@client) }
35
+
36
+ context "with valid pattern" do
37
+ before { allow_any_instance_of(Query).to receive(:pattern).and_return('') }
38
+ subject { query.url }
39
+ it { should include("xmloutputversion=2") }
40
+ end
41
+
42
+ context "without valid pattern" do
43
+ it "raises an error" do
44
+ expect { query.url }.to raise_error(RuntimeError, "Missing pattern")
45
+ end
46
+ end
47
+ end
48
+
49
+ context "with valid pattern" do
50
+ before { allow_any_instance_of(Query).to receive(:pattern).and_return('') }
51
+ it "should add language" do
52
+ subject.language = "en"
53
+ expect(subject.request_parameters).to include(documentlang: 'en')
54
+ end
55
+
56
+ it "should add start_time" do
57
+ subject.start_time = Time.new(2012, 12, 28, 9, 01, 22)
58
+ expect(subject.request_parameters).to include(ts: '2012-12-28 09:01:22')
59
+ end
60
+
61
+ it "should add end_time" do
62
+ subject.end_time = Time.new(2013, 12, 28, 9, 01, 22)
63
+ expect(subject.request_parameters).to include(tsTo: '2013-12-28 09:01:22')
64
+ end
65
+
66
+ it "should encode url paramters" do
67
+ subject.end_time = Time.new(2013, 12, 28, 9, 01, 22)
68
+ expect(subject.url_parameters).to include('tsTo=2013-12-28+09%3A01%3A22')
69
+ end
70
+ end
71
+
72
+ describe "#pattern" do
73
+ it "should add searchpattern" do
74
+ subject.pattern = 'spotify'
75
+ expect(subject.url_parameters).to include("searchpattern=spotify")
76
+ end
77
+ end
78
+
79
+ describe "#execute" do
80
+ context "with invalid API key" do
81
+ subject {
82
+ query = Query.new(Client.new('wrong'))
83
+ query.pattern = 'something'
84
+ query
85
+ }
86
+
87
+ it "should raise error on invalid API key" do
88
+ VCR.use_cassette('search_without_valid_api_key') do
89
+ expect { subject.execute }.to raise_error(RuntimeError, "The API key does not exist.")
90
+ end
91
+ end
92
+ end
93
+
94
+ context "when searching for spotify" do
95
+ subject {
96
+ query = Query.new(Client.new('api_key'))
97
+ query.pattern = 'spotify page-size:10'
98
+ query.language = 'sv'
99
+ query
100
+ }
101
+
102
+ it "should get posts when searching for spotify" do
103
+ VCR.use_cassette('search_for_spotify_on_sv_blogs') do
104
+ result = subject.execute
105
+ expect(result.posts).not_to be_empty
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+ require 'rspec/its'
3
+ require 'uri'
4
+
5
+ include Twingly::Analytics
6
+
7
+ describe Result do
8
+ it { should respond_to :posts }
9
+ it { should respond_to :number_of_matches_returned }
10
+ it { should respond_to :number_of_matches_total }
11
+ it { should respond_to :seconds_elapsed }
12
+
13
+ context "before query has populated responses" do
14
+ its(:posts) { should be_empty }
15
+ end
16
+ end
@@ -0,0 +1 @@
1
+ require File.dirname(__FILE__) + '/../lib/twingly-analytics'
data/spec/vcr_setup.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'vcr'
2
+
3
+ VCR.configure do |c|
4
+ c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
5
+ c.hook_into :webmock
6
+ c.filter_sensitive_data('api_key') { ENV['TWINGLY_ANALYTICS_KEY'] }
7
+ end
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'twingly-analytics/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "twingly-analytics"
8
+ spec.version = Twingly::Analytics::VERSION
9
+ spec.platform = Gem::Platform::RUBY
10
+ spec.authors = ["Johan Eckerström"]
11
+ spec.email = ["johan.eckerstrom@twingly.com"]
12
+ spec.homepage = "http://github.com/twingly/twingly-analytics-api-ruby"
13
+ spec.summary = "Ruby API client for Twingly Analytics"
14
+ spec.description = "Twingly Analytics is a product from Twingly AB"
15
+ spec.license = 'MIT'
16
+ spec.required_ruby_version = ">= 1.9.3"
17
+
18
+ spec.files = `git ls-files`.split($/)
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_dependency "faraday", ['>= 0.8', '< 0.10']
23
+ spec.add_dependency "nokogiri", "~> 1.0"
24
+ spec.add_development_dependency "rspec", "~> 3"
25
+ spec.add_development_dependency "rspec-its", "~> 1"
26
+ spec.add_development_dependency "vcr", "~> 2.6"
27
+ spec.add_development_dependency "webmock", "~> 1.0"
28
+ spec.add_development_dependency "rake"
29
+ end